From fa3149fb6ca0f0b1993ea713074c4d184978e025 Mon Sep 17 00:00:00 2001 From: Phil Schaf Date: Thu, 5 Sep 2024 18:00:14 +0200 Subject: [PATCH 1/9] Add VS Code integration --- {{cookiecutter.project_name}}/.gitignore | 4 --- .../.vscode/extensions.json | 18 ++++++++++ .../.vscode/launch.json | 33 +++++++++++++++++++ .../.vscode/settings.json | 20 +++++++++++ 4 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 {{cookiecutter.project_name}}/.vscode/extensions.json create mode 100644 {{cookiecutter.project_name}}/.vscode/launch.json create mode 100644 {{cookiecutter.project_name}}/.vscode/settings.json diff --git a/{{cookiecutter.project_name}}/.gitignore b/{{cookiecutter.project_name}}/.gitignore index d01a5d5d..31e10b3e 100644 --- a/{{cookiecutter.project_name}}/.gitignore +++ b/{{cookiecutter.project_name}}/.gitignore @@ -18,7 +18,3 @@ __pycache__/ # docs /docs/generated/ /docs/_build/ - -# IDEs -/.idea/ -/.vscode/ diff --git a/{{cookiecutter.project_name}}/.vscode/extensions.json b/{{cookiecutter.project_name}}/.vscode/extensions.json new file mode 100644 index 00000000..a6fa5803 --- /dev/null +++ b/{{cookiecutter.project_name}}/.vscode/extensions.json @@ -0,0 +1,18 @@ +{ + "recommendations": [ + // GitHub integration + "github.vscode-github-actions", + "github.vscode-pull-request-github", + // Language support + "ms-python.python", + "ms-python.vscode-pylance", + "ms-toolsai.jupyter", + "tamasfe.even-better-toml", + // Dependency management + "ninoseki.vscode-mogami", + // Linting and formatting + "editorconfig.editorconfig", + "charliermarsh.ruff", + "esbenp.prettier-vscode", + ], +} diff --git a/{{cookiecutter.project_name}}/.vscode/launch.json b/{{cookiecutter.project_name}}/.vscode/launch.json new file mode 100644 index 00000000..c544566d --- /dev/null +++ b/{{cookiecutter.project_name}}/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Build Documentation", + "type": "debugpy", + "request": "launch", + "module": "sphinx", + "args": ["-M", "html", ".", "_build"], + "cwd": "${workspaceFolder}/docs", + "console": "internalConsole", + "justMyCode": false, + }, + { + "name": "Python: Debug Test", + "type": "debugpy", + "request": "launch", + "program": "${file}", + "purpose": ["debug-test"], + "console": "internalConsole", + "justMyCode": false, + "env": { + "PYTEST_ADDOPTS": "--color=yes", + }, + "presentation": { + "hidden": true, + } + }, + ] +} diff --git a/{{cookiecutter.project_name}}/.vscode/settings.json b/{{cookiecutter.project_name}}/.vscode/settings.json new file mode 100644 index 00000000..473ef3e3 --- /dev/null +++ b/{{cookiecutter.project_name}}/.vscode/settings.json @@ -0,0 +1,20 @@ +{ + "[python][jsonc][yaml]": { + "editor.formatOnSave": true, + }, + "[python]": { + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.codeActionsOnSave": { + "source.fixAll": "always", + "source.organizeImports": "always", + }, + }, + "[jsonc][yaml]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + }, + "python.analysis.typeCheckingMode": "basic", + "python.testing.pytestEnabled": true, + "python.testing.pytestArgs": ["-vv", "--color=yes"], +} + + From f20660d2615744f853a38235f5202c91741e335a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2024 16:00:29 +0000 Subject: [PATCH 2/9] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../.vscode/extensions.json | 4 ++-- {{cookiecutter.project_name}}/.vscode/launch.json | 8 ++++---- {{cookiecutter.project_name}}/.vscode/settings.json | 12 +++++------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/{{cookiecutter.project_name}}/.vscode/extensions.json b/{{cookiecutter.project_name}}/.vscode/extensions.json index a6fa5803..e8561720 100644 --- a/{{cookiecutter.project_name}}/.vscode/extensions.json +++ b/{{cookiecutter.project_name}}/.vscode/extensions.json @@ -13,6 +13,6 @@ // Linting and formatting "editorconfig.editorconfig", "charliermarsh.ruff", - "esbenp.prettier-vscode", - ], + "esbenp.prettier-vscode" + ] } diff --git a/{{cookiecutter.project_name}}/.vscode/launch.json b/{{cookiecutter.project_name}}/.vscode/launch.json index c544566d..dcbe9a82 100644 --- a/{{cookiecutter.project_name}}/.vscode/launch.json +++ b/{{cookiecutter.project_name}}/.vscode/launch.json @@ -12,7 +12,7 @@ "args": ["-M", "html", ".", "_build"], "cwd": "${workspaceFolder}/docs", "console": "internalConsole", - "justMyCode": false, + "justMyCode": false }, { "name": "Python: Debug Test", @@ -23,11 +23,11 @@ "console": "internalConsole", "justMyCode": false, "env": { - "PYTEST_ADDOPTS": "--color=yes", + "PYTEST_ADDOPTS": "--color=yes" }, "presentation": { - "hidden": true, + "hidden": true } - }, + } ] } diff --git a/{{cookiecutter.project_name}}/.vscode/settings.json b/{{cookiecutter.project_name}}/.vscode/settings.json index 473ef3e3..71fbf434 100644 --- a/{{cookiecutter.project_name}}/.vscode/settings.json +++ b/{{cookiecutter.project_name}}/.vscode/settings.json @@ -1,20 +1,18 @@ { "[python][jsonc][yaml]": { - "editor.formatOnSave": true, + "editor.formatOnSave": true }, "[python]": { "editor.defaultFormatter": "charliermarsh.ruff", "editor.codeActionsOnSave": { "source.fixAll": "always", - "source.organizeImports": "always", - }, + "source.organizeImports": "always" + } }, "[jsonc][yaml]": { - "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.defaultFormatter": "esbenp.prettier-vscode" }, "python.analysis.typeCheckingMode": "basic", "python.testing.pytestEnabled": true, - "python.testing.pytestArgs": ["-vv", "--color=yes"], + "python.testing.pytestArgs": ["-vv", "--color=yes"] } - - From 9b5781976502781a169d973b889d0600bbdb380f Mon Sep 17 00:00:00 2001 From: Phil Schaf Date: Thu, 5 Sep 2024 18:03:59 +0200 Subject: [PATCH 3/9] prettierrc --- .prettierrc.yaml | 7 +++++++ {{cookiecutter.project_name}}/.prettierrc.yaml | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 .prettierrc.yaml create mode 100644 {{cookiecutter.project_name}}/.prettierrc.yaml diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000..9aaffcbb --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,7 @@ +overrides: + # JSON with comments and trailing commas + - files: .vscode/*.json + options: + parser: json5 + quoteProps: preserve + singleQuote: false diff --git a/{{cookiecutter.project_name}}/.prettierrc.yaml b/{{cookiecutter.project_name}}/.prettierrc.yaml new file mode 100644 index 00000000..9aaffcbb --- /dev/null +++ b/{{cookiecutter.project_name}}/.prettierrc.yaml @@ -0,0 +1,7 @@ +overrides: + # JSON with comments and trailing commas + - files: .vscode/*.json + options: + parser: json5 + quoteProps: preserve + singleQuote: false From f91ec9a9a86abd2ee0d7e2b3819e04ef864b2a83 Mon Sep 17 00:00:00 2001 From: Phil Schaf Date: Thu, 5 Sep 2024 19:26:16 +0200 Subject: [PATCH 4/9] Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks" This reverts commit f20660d2615744f853a38235f5202c91741e335a. --- .../.vscode/extensions.json | 4 ++-- {{cookiecutter.project_name}}/.vscode/launch.json | 8 ++++---- {{cookiecutter.project_name}}/.vscode/settings.json | 12 +++++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/{{cookiecutter.project_name}}/.vscode/extensions.json b/{{cookiecutter.project_name}}/.vscode/extensions.json index e8561720..a6fa5803 100644 --- a/{{cookiecutter.project_name}}/.vscode/extensions.json +++ b/{{cookiecutter.project_name}}/.vscode/extensions.json @@ -13,6 +13,6 @@ // Linting and formatting "editorconfig.editorconfig", "charliermarsh.ruff", - "esbenp.prettier-vscode" - ] + "esbenp.prettier-vscode", + ], } diff --git a/{{cookiecutter.project_name}}/.vscode/launch.json b/{{cookiecutter.project_name}}/.vscode/launch.json index dcbe9a82..c544566d 100644 --- a/{{cookiecutter.project_name}}/.vscode/launch.json +++ b/{{cookiecutter.project_name}}/.vscode/launch.json @@ -12,7 +12,7 @@ "args": ["-M", "html", ".", "_build"], "cwd": "${workspaceFolder}/docs", "console": "internalConsole", - "justMyCode": false + "justMyCode": false, }, { "name": "Python: Debug Test", @@ -23,11 +23,11 @@ "console": "internalConsole", "justMyCode": false, "env": { - "PYTEST_ADDOPTS": "--color=yes" + "PYTEST_ADDOPTS": "--color=yes", }, "presentation": { - "hidden": true + "hidden": true, } - } + }, ] } diff --git a/{{cookiecutter.project_name}}/.vscode/settings.json b/{{cookiecutter.project_name}}/.vscode/settings.json index 71fbf434..473ef3e3 100644 --- a/{{cookiecutter.project_name}}/.vscode/settings.json +++ b/{{cookiecutter.project_name}}/.vscode/settings.json @@ -1,18 +1,20 @@ { "[python][jsonc][yaml]": { - "editor.formatOnSave": true + "editor.formatOnSave": true, }, "[python]": { "editor.defaultFormatter": "charliermarsh.ruff", "editor.codeActionsOnSave": { "source.fixAll": "always", - "source.organizeImports": "always" - } + "source.organizeImports": "always", + }, }, "[jsonc][yaml]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "esbenp.prettier-vscode", }, "python.analysis.typeCheckingMode": "basic", "python.testing.pytestEnabled": true, - "python.testing.pytestArgs": ["-vv", "--color=yes"] + "python.testing.pytestArgs": ["-vv", "--color=yes"], } + + From 3b158b6bd97cb00a0df389b6db067c6d8bea15a3 Mon Sep 17 00:00:00 2001 From: Phil Schaf Date: Thu, 5 Sep 2024 19:37:13 +0200 Subject: [PATCH 5/9] Fix prettierrc --- .prettierrc.yaml | 2 +- {{cookiecutter.project_name}}/.vscode/launch.json | 4 ++-- {{cookiecutter.project_name}}/.vscode/settings.json | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.prettierrc.yaml b/.prettierrc.yaml index 9aaffcbb..99017b6d 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -1,6 +1,6 @@ overrides: # JSON with comments and trailing commas - - files: .vscode/*.json + - files: "**/.vscode/*.json" options: parser: json5 quoteProps: preserve diff --git a/{{cookiecutter.project_name}}/.vscode/launch.json b/{{cookiecutter.project_name}}/.vscode/launch.json index c544566d..36d18746 100644 --- a/{{cookiecutter.project_name}}/.vscode/launch.json +++ b/{{cookiecutter.project_name}}/.vscode/launch.json @@ -27,7 +27,7 @@ }, "presentation": { "hidden": true, - } + }, }, - ] + ], } diff --git a/{{cookiecutter.project_name}}/.vscode/settings.json b/{{cookiecutter.project_name}}/.vscode/settings.json index 473ef3e3..b6715d6f 100644 --- a/{{cookiecutter.project_name}}/.vscode/settings.json +++ b/{{cookiecutter.project_name}}/.vscode/settings.json @@ -16,5 +16,3 @@ "python.testing.pytestEnabled": true, "python.testing.pytestArgs": ["-vv", "--color=yes"], } - - From 9f342da5a0262295c5abaa210a84775752151401 Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Fri, 6 Sep 2024 16:31:03 +0200 Subject: [PATCH 6/9] conditional --- .prettierrc.yaml | 2 +- cookiecutter.json | 1 + hooks/post_gen_project.py | 17 ++++++++++++++++- scripts/tests/test_build.py | 17 ++++++++++++----- {{cookiecutter.project_name}}/.gitignore | 7 +++++++ ...e_integration %}.prettierrc.yaml{% endif %}} | 0 .../extensions.json" | 0 .../launch.json" | 0 .../settings.json" | 0 9 files changed, 37 insertions(+), 7 deletions(-) rename {{cookiecutter.project_name}}/{.prettierrc.yaml => {% if cookiecutter.ide_integration %}.prettierrc.yaml{% endif %}} (100%) rename {{cookiecutter.project_name}}/.vscode/extensions.json => "{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/extensions.json" (100%) rename {{cookiecutter.project_name}}/.vscode/launch.json => "{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/launch.json" (100%) rename {{cookiecutter.project_name}}/.vscode/settings.json => "{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/settings.json" (100%) diff --git a/.prettierrc.yaml b/.prettierrc.yaml index 99017b6d..e96d1dd4 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -1,6 +1,6 @@ overrides: # JSON with comments and trailing commas - - files: "**/.vscode/*.json" + - files: "**/*.vscode*/*.json" options: parser: json5 quoteProps: preserve diff --git a/cookiecutter.json b/cookiecutter.json index cf40b568..87b4324a 100644 --- a/cookiecutter.json +++ b/cookiecutter.json @@ -14,6 +14,7 @@ "GNU General Public License Version 3", "Unlicense" ], + "ide_integration": true, "_copy_without_render": [ ".github/workflows/build.yaml", ".github/workflows/test.yaml", diff --git a/hooks/post_gen_project.py b/hooks/post_gen_project.py index c3191de3..3f1f79ee 100644 --- a/hooks/post_gen_project.py +++ b/hooks/post_gen_project.py @@ -1,12 +1,27 @@ #!/bin/env python3 +import shutil from subprocess import run -{% if not cookiecutter._render_devdocs %} from pathlib import Path +{% if not cookiecutter._render_devdocs %} # Post processing Path("docs/template_usage.md").unlink() {% endif %} +# Skip directories marked for skipping +def skipped_dirs(): + for toplevel in Path().iterdir(): + if toplevel.name == ".git": + continue + if toplevel.name == "DELETE-ME": + yield toplevel + else: + yield from toplevel.rglob("DELETE-ME") + +for path in skipped_dirs(): + assert path.is_dir(), path + shutil.rmtree(path) + # Update pre commit hooks run("pre-commit autoupdate -c .pre-commit-config.yaml".split(), check=True) run("pre-commit install".split(), check=True) diff --git a/scripts/tests/test_build.py b/scripts/tests/test_build.py index e8d00fb4..698cd32a 100644 --- a/scripts/tests/test_build.py +++ b/scripts/tests/test_build.py @@ -18,14 +18,21 @@ @pytest.mark.parametrize( ("params", "path", "pattern"), [ - ({}, "docs/conf.py", r'"github_repo": project_name,'), - ({"github_repo": "floob"}, "docs/conf.py", r'"github_repo": "floob",'), + pytest.param({}, "docs/conf.py", r'"github_repo": project_name,', id="no_gh_repo"), + pytest.param({"github_repo": "floob"}, "docs/conf.py", r'"github_repo": "floob",', id="gh_repo"), + pytest.param({}, ".vscode/extensions.json", r'"ms-python.python",', id="no_ide_integ"), + pytest.param({"ide_integration": False}, ".vscode", None, id="ide_integ"), ], ) -def test_build(tmp_path: Path, params: Mapping[str, Any], path: Path | str, pattern: re.Pattern | str): +def test_build(tmp_path: Path, params: Mapping[str, Any], path: Path | str, pattern: re.Pattern | str | None): cookiecutter(str(HERE.parent.parent), output_dir=tmp_path, no_input=True, extra_context=params) proj_dir = tmp_path / "project-name" assert proj_dir.is_dir() path = proj_dir / path - pattern = re.compile(pattern, re.MULTILINE) - assert pattern.search(path.read_text()) + if pattern is None: + assert not path.exists() + else: + pattern = re.compile(pattern, re.MULTILINE) + assert pattern.search(path.read_text()) + + assert not list(proj_dir.rglob("DELETE-ME")) diff --git a/{{cookiecutter.project_name}}/.gitignore b/{{cookiecutter.project_name}}/.gitignore index 31e10b3e..c53d464d 100644 --- a/{{cookiecutter.project_name}}/.gitignore +++ b/{{cookiecutter.project_name}}/.gitignore @@ -18,3 +18,10 @@ __pycache__/ # docs /docs/generated/ /docs/_build/ + +{%- if not cookiecutter.ide_integration %} + +# IDEs +/.idea/ +/.vscode/ +{% endif -%} diff --git a/{{cookiecutter.project_name}}/.prettierrc.yaml b/{{cookiecutter.project_name}}/{% if cookiecutter.ide_integration %}.prettierrc.yaml{% endif %} similarity index 100% rename from {{cookiecutter.project_name}}/.prettierrc.yaml rename to {{cookiecutter.project_name}}/{% if cookiecutter.ide_integration %}.prettierrc.yaml{% endif %} diff --git a/{{cookiecutter.project_name}}/.vscode/extensions.json "b/{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/extensions.json" similarity index 100% rename from {{cookiecutter.project_name}}/.vscode/extensions.json rename to "{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/extensions.json" diff --git a/{{cookiecutter.project_name}}/.vscode/launch.json "b/{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/launch.json" similarity index 100% rename from {{cookiecutter.project_name}}/.vscode/launch.json rename to "{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/launch.json" diff --git a/{{cookiecutter.project_name}}/.vscode/settings.json "b/{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/settings.json" similarity index 100% rename from {{cookiecutter.project_name}}/.vscode/settings.json rename to "{{cookiecutter.project_name}}/{{\".vscode\" if cookiecutter.ide_integration else \"DELETE-ME\" }}/settings.json" From eabed9ba2bf93e83a9d82303c42e260acd383ec2 Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Fri, 6 Sep 2024 16:34:30 +0200 Subject: [PATCH 7/9] fmt --- {{cookiecutter.project_name}}/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/{{cookiecutter.project_name}}/.gitignore b/{{cookiecutter.project_name}}/.gitignore index c53d464d..21763e57 100644 --- a/{{cookiecutter.project_name}}/.gitignore +++ b/{{cookiecutter.project_name}}/.gitignore @@ -24,4 +24,4 @@ __pycache__/ # IDEs /.idea/ /.vscode/ -{% endif -%} +{%- endif %} From 8027c5d51f91d7eb8db8696b42ec6ba7cdb86f0d Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Fri, 6 Sep 2024 16:42:50 +0200 Subject: [PATCH 8/9] =?UTF-8?q?jinja=20and=20whitespace=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {{cookiecutter.project_name}}/.gitignore | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/{{cookiecutter.project_name}}/.gitignore b/{{cookiecutter.project_name}}/.gitignore index 21763e57..2ff7df49 100644 --- a/{{cookiecutter.project_name}}/.gitignore +++ b/{{cookiecutter.project_name}}/.gitignore @@ -3,6 +3,13 @@ *~ buck-out/ +{% if not cookiecutter.ide_integration -%} +# IDEs +/.idea/ +/.vscode/ + +{% endif -%} + # Compiled files .venv/ __pycache__/ @@ -18,10 +25,3 @@ __pycache__/ # docs /docs/generated/ /docs/_build/ - -{%- if not cookiecutter.ide_integration %} - -# IDEs -/.idea/ -/.vscode/ -{%- endif %} From d67b8f546bb3b764621d154e4f715f8dacb9978f Mon Sep 17 00:00:00 2001 From: "Philipp A." Date: Fri, 6 Sep 2024 16:45:06 +0200 Subject: [PATCH 9/9] choice --- .github/assets/cookiecutter-scverse-instance.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/assets/cookiecutter-scverse-instance.json b/.github/assets/cookiecutter-scverse-instance.json index 41f7a2a6..03a58b5f 100644 --- a/.github/assets/cookiecutter-scverse-instance.json +++ b/.github/assets/cookiecutter-scverse-instance.json @@ -8,6 +8,7 @@ "github_user": "scverse", "github_repo": "cookiecutter-scverse-instance", "license": "BSD 3-Clause License", + "ide_integration": true, "_copy_without_render": [ ".github/workflows/**.yaml", "docs/_templates/autosummary/**.rst"