pinky-core 0.1.0.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pinky_core-0.1.0.dev1/.github/workflows/ci.yml +39 -0
- pinky_core-0.1.0.dev1/.github/workflows/publish.yml +32 -0
- pinky_core-0.1.0.dev1/.github/workflows/release.yml +47 -0
- pinky_core-0.1.0.dev1/.gitignore +60 -0
- pinky_core-0.1.0.dev1/.pre-commit-config.yaml +125 -0
- pinky_core-0.1.0.dev1/.secrets.baseline +127 -0
- pinky_core-0.1.0.dev1/.vscode/extensions.json +35 -0
- pinky_core-0.1.0.dev1/.vscode/settings.json +46 -0
- pinky_core-0.1.0.dev1/AGENT.md +209 -0
- pinky_core-0.1.0.dev1/LICENSE +21 -0
- pinky_core-0.1.0.dev1/PKG-INFO +87 -0
- pinky_core-0.1.0.dev1/README.md +30 -0
- pinky_core-0.1.0.dev1/docs/adr/0001-zero-dependency-static-html.md +23 -0
- pinky_core-0.1.0.dev1/docs/explanation/design.md +65 -0
- pinky_core-0.1.0.dev1/docs/explanation/features.md +85 -0
- pinky_core-0.1.0.dev1/docs/index.md +15 -0
- pinky_core-0.1.0.dev1/docs/reference/generated/api/files.md +5 -0
- pinky_core-0.1.0.dev1/docs/reference/generated/api/fmt.md +5 -0
- pinky_core-0.1.0.dev1/docs/reference/generated/api/schedule.md +5 -0
- pinky_core-0.1.0.dev1/docs/reference/generated/api/security.md +5 -0
- pinky_core-0.1.0.dev1/docs/reference/generated/api/sql.md +5 -0
- pinky_core-0.1.0.dev1/docs/reference/generated/api/validate.md +5 -0
- pinky_core-0.1.0.dev1/docs/reference/generated/api/xml.md +5 -0
- pinky_core-0.1.0.dev1/mkdocs.dev.yml +3 -0
- pinky_core-0.1.0.dev1/mkdocs.yml +35 -0
- pinky_core-0.1.0.dev1/pyproject.toml +97 -0
- pinky_core-0.1.0.dev1/scripts/deploy_validate_udfs.py +156 -0
- pinky_core-0.1.0.dev1/scripts/hooks/check-docs-up-to-date +36 -0
- pinky_core-0.1.0.dev1/scripts/hooks/check_forbidden_keywords.py +76 -0
- pinky_core-0.1.0.dev1/scripts/hooks/check_typed_api.py +138 -0
- pinky_core-0.1.0.dev1/scripts/hooks/check_zws.py +39 -0
- pinky_core-0.1.0.dev1/scripts/hooks/commit-msg +142 -0
- pinky_core-0.1.0.dev1/sql/deploy_udf_example.sql +75 -0
- pinky_core-0.1.0.dev1/src/pinky_core/__init__.py +149 -0
- pinky_core-0.1.0.dev1/src/pinky_core/files.py +178 -0
- pinky_core-0.1.0.dev1/src/pinky_core/fmt.py +729 -0
- pinky_core-0.1.0.dev1/src/pinky_core/schedule.py +230 -0
- pinky_core-0.1.0.dev1/src/pinky_core/security.py +52 -0
- pinky_core-0.1.0.dev1/src/pinky_core/sql.py +83 -0
- pinky_core-0.1.0.dev1/src/pinky_core/sql_custom.py +78 -0
- pinky_core-0.1.0.dev1/src/pinky_core/validate.py +575 -0
- pinky_core-0.1.0.dev1/src/pinky_core/xml.py +451 -0
- pinky_core-0.1.0.dev1/tests/__init__.py +0 -0
- pinky_core-0.1.0.dev1/tests/fixtures/cats_domination.xml +213 -0
- pinky_core-0.1.0.dev1/tests/test_files.py +271 -0
- pinky_core-0.1.0.dev1/tests/test_fmt.py +219 -0
- pinky_core-0.1.0.dev1/tests/test_schedule.py +181 -0
- pinky_core-0.1.0.dev1/tests/test_security.py +91 -0
- pinky_core-0.1.0.dev1/tests/test_sql.py +84 -0
- pinky_core-0.1.0.dev1/tests/test_validate.py +194 -0
- pinky_core-0.1.0.dev1/tests/test_xml_xpath.py +347 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, develop]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
ci:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
env:
|
|
13
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Set up Python 3.11
|
|
19
|
+
uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.11"
|
|
22
|
+
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: pip install -e ".[validate,address,dev]"
|
|
25
|
+
|
|
26
|
+
- name: Lint
|
|
27
|
+
run: ruff check src/ tests/
|
|
28
|
+
|
|
29
|
+
- name: Format check
|
|
30
|
+
run: ruff format --check src/ tests/
|
|
31
|
+
|
|
32
|
+
- name: Type check
|
|
33
|
+
run: mypy src/pinky_core/
|
|
34
|
+
|
|
35
|
+
- name: Security scan
|
|
36
|
+
run: bandit -r src/pinky_core/ -ll
|
|
37
|
+
|
|
38
|
+
- name: Tests
|
|
39
|
+
run: pytest
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*.dev*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
env:
|
|
12
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
id-token: write # required for trusted publishing (OIDC)
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Set up Python 3.11
|
|
21
|
+
uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.11"
|
|
24
|
+
|
|
25
|
+
- name: Install build
|
|
26
|
+
run: pip install build
|
|
27
|
+
|
|
28
|
+
- name: Build wheel and sdist
|
|
29
|
+
run: python -m build
|
|
30
|
+
|
|
31
|
+
- name: Publish to PyPI
|
|
32
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
release:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
env:
|
|
11
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
|
12
|
+
permissions:
|
|
13
|
+
contents: write
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Read version
|
|
20
|
+
id: version
|
|
21
|
+
run: echo "version=$(grep '^version' pyproject.toml | cut -d'"' -f2)" >> $GITHUB_OUTPUT
|
|
22
|
+
|
|
23
|
+
- name: Guard — no .dev version on main
|
|
24
|
+
run: |
|
|
25
|
+
if [[ "${{ steps.version.outputs.version }}" == *".dev"* ]]; then
|
|
26
|
+
echo "❌ version .dev sur main — bumper la version avant de merger"
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
- name: Create tag
|
|
31
|
+
run: |
|
|
32
|
+
git tag "v${{ steps.version.outputs.version }}"
|
|
33
|
+
git push origin "v${{ steps.version.outputs.version }}"
|
|
34
|
+
|
|
35
|
+
- name: Set up Python 3.11
|
|
36
|
+
uses: actions/setup-python@v5
|
|
37
|
+
with:
|
|
38
|
+
python-version: "3.11"
|
|
39
|
+
|
|
40
|
+
- name: Install build
|
|
41
|
+
run: pip install build
|
|
42
|
+
|
|
43
|
+
- name: Build
|
|
44
|
+
run: python -m build
|
|
45
|
+
|
|
46
|
+
- name: Publish to PyPI
|
|
47
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# ── Python ───────────────────────────────────────────────────────────────────
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.pyo
|
|
5
|
+
*.pyd
|
|
6
|
+
.Python
|
|
7
|
+
*.egg-info/
|
|
8
|
+
dist/
|
|
9
|
+
build/
|
|
10
|
+
*.egg
|
|
11
|
+
.eggs/
|
|
12
|
+
|
|
13
|
+
# ── Environments ─────────────────────────────────────────────────────────────
|
|
14
|
+
.env
|
|
15
|
+
.venv/
|
|
16
|
+
venv/
|
|
17
|
+
.conda/
|
|
18
|
+
|
|
19
|
+
# ── Tools cache ──────────────────────────────────────────────────────────────
|
|
20
|
+
.ruff_cache/
|
|
21
|
+
.mypy_cache/
|
|
22
|
+
.pytest_cache/
|
|
23
|
+
.pre-commit-cache/
|
|
24
|
+
htmlcov/
|
|
25
|
+
.coverage
|
|
26
|
+
.coverage.*
|
|
27
|
+
coverage.xml
|
|
28
|
+
|
|
29
|
+
# ── Generated docs ───────────────────────────────────────────────────────────
|
|
30
|
+
# docs/api/ is versioned — regenerate with: pdoc snowflake_kit -o docs/api/ or wget
|
|
31
|
+
# Heavy wget mirrors are excluded (1 GB+)
|
|
32
|
+
docs/api/*/*.com/
|
|
33
|
+
# Local MkDocs assets — symlinked from pinky-studio for local dev, not committed
|
|
34
|
+
docs/assets/
|
|
35
|
+
site/
|
|
36
|
+
|
|
37
|
+
# ── Provider cache ───────────────────────────────────────────────────────────
|
|
38
|
+
.snowflake-provider/
|
|
39
|
+
|
|
40
|
+
# ── Local dev ────────────────────────────────────────────────────────────────
|
|
41
|
+
.local/
|
|
42
|
+
*.local.json
|
|
43
|
+
|
|
44
|
+
# ── Snowflake credentials ────────────────────────────────────────────────────
|
|
45
|
+
*.p8
|
|
46
|
+
connection.json
|
|
47
|
+
connections.toml
|
|
48
|
+
.snowflake/
|
|
49
|
+
|
|
50
|
+
# ── macOS ────────────────────────────────────────────────────────────────────
|
|
51
|
+
.DS_Store
|
|
52
|
+
.AppleDouble
|
|
53
|
+
.LSOverride
|
|
54
|
+
|
|
55
|
+
# ── VSCode ───────────────────────────────────────────────────────────────────
|
|
56
|
+
# (keep .vscode/extensions.json and .vscode/settings.json — versioned)
|
|
57
|
+
.vscode/*.log
|
|
58
|
+
|
|
59
|
+
# ── Plan output ──────────────────────────────────────────────────────────────
|
|
60
|
+
out/
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# .pre-commit-config.yaml — snowflake-kit
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# Install:
|
|
6
|
+
# pip install pre-commit
|
|
7
|
+
# pre-commit install
|
|
8
|
+
# pre-commit install --hook-type commit-msg
|
|
9
|
+
#
|
|
10
|
+
# Update standard hooks:
|
|
11
|
+
# pre-commit autoupdate
|
|
12
|
+
# =============================================================================
|
|
13
|
+
default_install_hook_types: [pre-commit, commit-msg]
|
|
14
|
+
|
|
15
|
+
repos:
|
|
16
|
+
# ── Formatting: trailing spaces + newline ─────────────────────────────────
|
|
17
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
18
|
+
rev: v6.0.0
|
|
19
|
+
hooks:
|
|
20
|
+
- id: trailing-whitespace
|
|
21
|
+
- id: end-of-file-fixer
|
|
22
|
+
- id: check-yaml
|
|
23
|
+
- id: check-toml
|
|
24
|
+
- id: check-merge-conflict
|
|
25
|
+
- id: debug-statements
|
|
26
|
+
|
|
27
|
+
# ── Formatting: Markdown ──────────────────────────────────────────────────
|
|
28
|
+
- repo: local
|
|
29
|
+
hooks:
|
|
30
|
+
- id: mdformat
|
|
31
|
+
name: mdformat
|
|
32
|
+
entry: mdformat
|
|
33
|
+
language: system
|
|
34
|
+
files: ^README\.md$
|
|
35
|
+
|
|
36
|
+
# ── Security: secrets & forbidden files ──────────────────────────────────
|
|
37
|
+
- repo: https://github.com/gitleaks/gitleaks
|
|
38
|
+
rev: v8.30.0
|
|
39
|
+
hooks:
|
|
40
|
+
- id: gitleaks
|
|
41
|
+
|
|
42
|
+
# ── Security: alternative secret detection ────────────────────────────────
|
|
43
|
+
- repo: https://github.com/Yelp/detect-secrets
|
|
44
|
+
rev: v1.5.0
|
|
45
|
+
hooks:
|
|
46
|
+
- id: detect-secrets
|
|
47
|
+
args: ["--baseline", ".secrets.baseline"]
|
|
48
|
+
exclude: ^docs/
|
|
49
|
+
|
|
50
|
+
# ── Python: ruff lint + format ────────────────────────────────────────────
|
|
51
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
52
|
+
rev: v0.15.9
|
|
53
|
+
hooks:
|
|
54
|
+
- id: ruff-check
|
|
55
|
+
args: [--no-fix]
|
|
56
|
+
- id: ruff-format
|
|
57
|
+
args: [--check]
|
|
58
|
+
|
|
59
|
+
# ── Python: type checking ─────────────────────────────────────────────────
|
|
60
|
+
- repo: local
|
|
61
|
+
hooks:
|
|
62
|
+
- id: mypy
|
|
63
|
+
name: mypy
|
|
64
|
+
entry: mypy
|
|
65
|
+
language: system
|
|
66
|
+
types: [python]
|
|
67
|
+
args: [--ignore-missing-imports]
|
|
68
|
+
files: ^src/
|
|
69
|
+
|
|
70
|
+
# ── Python: security ─────────────────────────────────────────────────────
|
|
71
|
+
- repo: local
|
|
72
|
+
hooks:
|
|
73
|
+
- id: bandit
|
|
74
|
+
name: bandit
|
|
75
|
+
entry: bandit
|
|
76
|
+
language: system
|
|
77
|
+
pass_filenames: false
|
|
78
|
+
args: [-r, src/, -ll]
|
|
79
|
+
|
|
80
|
+
# ── Zero-width spaces (copy-paste from Outlook/Teams) ────────────────────
|
|
81
|
+
- repo: local
|
|
82
|
+
hooks:
|
|
83
|
+
- id: check-zws
|
|
84
|
+
name: "[ZWS] Invisible characters (zero-width)"
|
|
85
|
+
entry: python scripts/hooks/check_zws.py
|
|
86
|
+
language: system
|
|
87
|
+
pass_filenames: true
|
|
88
|
+
|
|
89
|
+
# ── Typed API guard ──────────────────────────────────────────────────────
|
|
90
|
+
- repo: local
|
|
91
|
+
hooks:
|
|
92
|
+
- id: check-typed-api
|
|
93
|
+
name: "[TYPED-API] No raw dict/tuple/set in public annotations"
|
|
94
|
+
entry: python scripts/hooks/check_typed_api.py
|
|
95
|
+
language: system
|
|
96
|
+
types: [python]
|
|
97
|
+
files: ^src/
|
|
98
|
+
|
|
99
|
+
# ── Employer reference guard ──────────────────────────────────────────────
|
|
100
|
+
- repo: local
|
|
101
|
+
hooks:
|
|
102
|
+
- id: check-forbidden-keywords
|
|
103
|
+
name: "[FORBIDDEN] Employer references"
|
|
104
|
+
entry: python scripts/hooks/check_forbidden_keywords.py
|
|
105
|
+
language: system
|
|
106
|
+
pass_filenames: true
|
|
107
|
+
|
|
108
|
+
# ── Docs up-to-date check ─────────────────────────────────────────────────
|
|
109
|
+
- repo: local
|
|
110
|
+
hooks:
|
|
111
|
+
- id: check-docs-up-to-date
|
|
112
|
+
name: Docs up-to-date (README + pdoc)
|
|
113
|
+
entry: scripts/hooks/check-docs-up-to-date
|
|
114
|
+
language: script
|
|
115
|
+
stages: [pre-commit]
|
|
116
|
+
pass_filenames: false
|
|
117
|
+
|
|
118
|
+
# ── Commit message format ─────────────────────────────────────────────────
|
|
119
|
+
- repo: local
|
|
120
|
+
hooks:
|
|
121
|
+
- id: commit-msg-format
|
|
122
|
+
name: Commit message format
|
|
123
|
+
entry: scripts/hooks/commit-msg
|
|
124
|
+
language: script
|
|
125
|
+
stages: [commit-msg]
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.5.0",
|
|
3
|
+
"plugins_used": [
|
|
4
|
+
{
|
|
5
|
+
"name": "ArtifactoryDetector"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"name": "AWSKeyDetector"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "AzureStorageKeyDetector"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "Base64HighEntropyString",
|
|
15
|
+
"limit": 4.5
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "BasicAuthDetector"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "CloudantDetector"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "DiscordBotTokenDetector"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "GitHubTokenDetector"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "GitLabTokenDetector"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "HexHighEntropyString",
|
|
34
|
+
"limit": 3.0
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"name": "IbmCloudIamDetector"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "IbmCosHmacDetector"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "IPPublicDetector"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"name": "JwtTokenDetector"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "KeywordDetector",
|
|
50
|
+
"keyword_exclude": ""
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "MailchimpDetector"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "NpmDetector"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "OpenAIDetector"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "PrivateKeyDetector"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "PypiTokenDetector"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "SendGridDetector"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "SlackDetector"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "SoftlayerDetector"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "SquareOAuthDetector"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "StripeDetector"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"name": "TelegramBotTokenDetector"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "TwilioKeyDetector"
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"filters_used": [
|
|
90
|
+
{
|
|
91
|
+
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
|
|
95
|
+
"min_level": 2
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"path": "detect_secrets.filters.heuristic.is_indirect_reference"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"path": "detect_secrets.filters.heuristic.is_likely_id_string"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"path": "detect_secrets.filters.heuristic.is_lock_file"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"path": "detect_secrets.filters.heuristic.is_potential_uuid"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"path": "detect_secrets.filters.heuristic.is_sequential_string"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"path": "detect_secrets.filters.heuristic.is_swagger_file"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"path": "detect_secrets.filters.heuristic.is_templated_secret"
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
"results": {},
|
|
126
|
+
"generated_at": "2026-05-10T19:21:47Z"
|
|
127
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"recommendations": [
|
|
3
|
+
// ── AI ────────────────────────────────────────────────────────────────────
|
|
4
|
+
"anthropic.claude-code",
|
|
5
|
+
|
|
6
|
+
// ── Git / GitHub ──────────────────────────────────────────────────────────
|
|
7
|
+
"eamodio.gitlens",
|
|
8
|
+
"github.vscode-pull-request-github",
|
|
9
|
+
"github.vscode-github-actions",
|
|
10
|
+
|
|
11
|
+
// ── Python ────────────────────────────────────────────────────────────────
|
|
12
|
+
"ms-python.python",
|
|
13
|
+
"ms-python.pylance",
|
|
14
|
+
"charliermarsh.ruff",
|
|
15
|
+
|
|
16
|
+
// ── Snowflake ─────────────────────────────────────────────────────────────
|
|
17
|
+
"snowflake.snowflake-vsc",
|
|
18
|
+
|
|
19
|
+
// ── YAML ──────────────────────────────────────────────────────────────────
|
|
20
|
+
"redhat.vscode-yaml",
|
|
21
|
+
|
|
22
|
+
// ── Markdown ──────────────────────────────────────────────────────────────
|
|
23
|
+
"yzhang.markdown-all-in-one",
|
|
24
|
+
"bierner.markdown-mermaid",
|
|
25
|
+
|
|
26
|
+
// ── Data files ────────────────────────────────────────────────────────────
|
|
27
|
+
"mechatroner.rainbow-csv",
|
|
28
|
+
"AykutSarac.jsoncrack-vscode",
|
|
29
|
+
"redhat.vscode-xml",
|
|
30
|
+
|
|
31
|
+
// ── DX ────────────────────────────────────────────────────────────────────
|
|
32
|
+
"oderwat.indent-rainbow",
|
|
33
|
+
"ryu1kn.partial-diff"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
// ── Python ──────────────────────────────────────────────────────────────────
|
|
3
|
+
"python.defaultInterpreterPath": "~/miniforge3/envs/snowflake-kit/bin/python",
|
|
4
|
+
"python.analysis.typeCheckingMode": "basic",
|
|
5
|
+
|
|
6
|
+
// ── Ruff ────────────────────────────────────────────────────────────────────
|
|
7
|
+
"[python]": {
|
|
8
|
+
"editor.defaultFormatter": "charliermarsh.ruff",
|
|
9
|
+
"editor.formatOnSave": true,
|
|
10
|
+
"editor.codeActionsOnSave": {
|
|
11
|
+
"source.fixAll.ruff": "explicit",
|
|
12
|
+
"source.organizeImports.ruff": "explicit"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
// ── YAML ────────────────────────────────────────────────────────────────────
|
|
17
|
+
"[yaml]": {
|
|
18
|
+
"editor.defaultFormatter": "redhat.vscode-yaml",
|
|
19
|
+
"editor.formatOnSave": true
|
|
20
|
+
},
|
|
21
|
+
"yaml.schemas": {
|
|
22
|
+
"./schemas/*.schema.json": "resources/**/*.yml"
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
// ── Editor ──────────────────────────────────────────────────────────────────
|
|
26
|
+
"editor.rulers": [88],
|
|
27
|
+
"editor.tabSize": 4,
|
|
28
|
+
"editor.insertSpaces": true,
|
|
29
|
+
"editor.trimAutoWhitespace": true,
|
|
30
|
+
"files.trimTrailingWhitespace": true,
|
|
31
|
+
"files.insertFinalNewline": true,
|
|
32
|
+
|
|
33
|
+
// ── Git ─────────────────────────────────────────────────────────────────────
|
|
34
|
+
"git.autofetch": true,
|
|
35
|
+
"git.confirmSync": false,
|
|
36
|
+
"gitlens.currentLine.enabled": true,
|
|
37
|
+
|
|
38
|
+
// ── Explorer ────────────────────────────────────────────────────────────────
|
|
39
|
+
"files.exclude": {
|
|
40
|
+
"**/__pycache__": true,
|
|
41
|
+
"**/.ruff_cache": true,
|
|
42
|
+
"**/.mypy_cache": true,
|
|
43
|
+
"**/*.egg-info": true,
|
|
44
|
+
"**/.snowflake-provider": true
|
|
45
|
+
}
|
|
46
|
+
}
|