diff --git a/pre_commit/languages/julia.py b/pre_commit/languages/julia.py index df91c069..5bf6b66a 100644 --- a/pre_commit/languages/julia.py +++ b/pre_commit/languages/julia.py @@ -99,6 +99,14 @@ def install_environment( shutil.copy(manifest_file, envdir) break + # copy `src` files if they exist + src_dir = prefix.path('src') + if os.path.isdir(src_dir): + shutil.copytree( + src_dir, os.path.join(envdir, 'src'), + dirs_exist_ok=True, + ) + # Julia code to instantiate the hook environment julia_code = """ @assert length(ARGS) > 0 diff --git a/tests/languages/julia_test.py b/tests/languages/julia_test.py index 4ea3c25b..69ed12b0 100644 --- a/tests/languages/julia_test.py +++ b/tests/languages/julia_test.py @@ -95,3 +95,41 @@ def test_julia_repo_local(tmp_path): env_dir, julia, 'local.jl --local-arg1 --local-arg2', deps=deps, is_local=True, ) == expected + + +def _make_src_hook(tmp_path, pkg_code, script_code): + # here we setup a hook with a src dir and a script dir + src_dir = tmp_path.joinpath('src') + src_dir.mkdir() + src_dir.joinpath('ExamplePkg.jl').write_text(pkg_code) + + script_dir = tmp_path.joinpath('scripts') + script_dir.mkdir() + script_dir.joinpath('main.jl').write_text(script_code) + + tmp_path.joinpath('Project.toml').write_text( + 'name = "ExamplePkg"\n' + 'uuid = "df230c44-b485-4b6a-bafb-763c50abe554"\n' + '[deps]\n' + 'Example = "7876af07-990d-54b4-ab0e-23690620f79a"\n', + ) + + +def test_julia_hook_src(tmp_path): + pkg_code = """ + module ExamplePkg + using Example + export main + function main() + println("Hello, world!") + end + end + """ + + script_code = """ + using ExamplePkg + main() + """ + _make_src_hook(tmp_path, pkg_code, script_code) + expected = (0, b'Hello, world!\n') + assert run_language(tmp_path, julia, 'scripts/main.jl') == expected