diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4a9a2539..d9b61a9a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -39,13 +39,17 @@ "ms-python.python", "ms-toolsai.jupyter", "njpwerner.autodocstring", + "quary.sqruff", "redhat.vscode-yaml", "shardulm94.trailing-spaces", - "sqlfluff.vscode-sqlfluff", "streetsidesoftware.code-spell-checker", "tamasfe.even-better-toml", "yzhang.markdown-all-in-one" - ] + ], + "settings": { + "python.defaultInterpreterPath": "./.venv/bin/python", + "sqruff.executablePath": "${workspaceFolder}/.venv/bin/sqruff" + } } }, "containerEnv": { diff --git a/.dockerignore b/.dockerignore index 29a57931..cd205d42 100644 --- a/.dockerignore +++ b/.dockerignore @@ -182,7 +182,7 @@ pytest-coverage.txt .coveragerc .env.local .pre-commit-config.yaml -.sqlfluff +.sqruff assets LICENSE noxfile.py diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 065f6fd3..9a57b644 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -8,7 +8,8 @@ on: - "**.py" - "**.sql" - ".python-version" - - ".sqlfluff" + - ".sqruff" + - ".sqruffignore" - "pyproject.toml" - "ruff.toml" - "uv.lock" @@ -27,7 +28,7 @@ jobs: - name: Format by Ruff run: uv run nox -s fmt -- --ruff - sqlfluff: + sqruff: runs-on: ubuntu-latest steps: @@ -37,5 +38,5 @@ jobs: - name: Setup Python with uv uses: ./.github/actions/setup-python-with-uv - - name: Format by SQLFluff - run: uv run nox -s fmt -- --sqlfluff + - name: Format by sqruff + run: uv run nox -s fmt -- --sqruff diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 9f7ad6b8..abe26c7e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -8,7 +8,8 @@ on: - "**.py" - "**.sql" - ".python-version" - - ".sqlfluff" + - ".sqruff" + - ".sqruffignore" - "pyproject.toml" - "ruff.toml" - "ty.toml" @@ -28,7 +29,7 @@ jobs: - name: Lint by Ruff run: uv run nox -s lint -- --ruff - sqlfluff: + sqruff: runs-on: ubuntu-latest steps: @@ -38,8 +39,8 @@ jobs: - name: Setup Python with uv uses: ./.github/actions/setup-python-with-uv - - name: Lint by SQLFluff - run: uv run nox -s lint -- --sqlfluff + - name: Lint by sqruff + run: uv run nox -s lint -- --sqruff ty: runs-on: ubuntu-latest diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f2b3c897..b85d4bab 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,48 +6,49 @@ repos: hooks: - id: end-of-file-fixer name: End of file fixer - description: "Ensure files end with a newline" + description: Ensure files end with a newline - id: check-json name: Check JSON - description: "Check that JSON files are valid" + description: Check that JSON files are valid - id: check-toml name: Check TOML - description: "Check that TOML files are valid" + description: Check that TOML files are valid - id: check-xml name: Check XML - description: "Check that XML files are valid" + description: Check that XML files are valid - id: check-yaml name: Check YAML - description: "Check that YAML files are valid" + description: Check that YAML files are valid - id: detect-private-key name: Detect private key - description: "Detect private keys in files" + description: Detect private keys in files - id: trailing-whitespace name: Trailing whitespace - description: "Remove trailing whitespace from files" + description: Remove trailing whitespace from files - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.12.8 hooks: + - id: ruff-format + name: Python Format + description: Run 'ruff format' for extremely fast Python formatting + - id: ruff - name: Ruff check - description: "Run 'ruff check' for extremely fast Python linting" + name: Python Lint + description: Run 'ruff check' for extremely fast Python linting args: [--fix] - - id: ruff-format - name: Ruff format - description: "Run 'ruff format' for extremely fast Python formatting" - - repo: local hooks: - id: ty - name: ty check + name: Python Type Check + description: Run 'ty check' for Python type checking entry: uv run ty check language: python types: [python] @@ -56,28 +57,33 @@ repos: rev: v1.7.10 hooks: - id: actionlint + name: GitHub Actions Lint + description: Lint GitHub Actions workflows - repo: https://github.com/hadolint/hadolint rev: v2.12.0 hooks: - id: hadolint - name: Lint Dockerfiles + name: Dockerfile Lint description: Runs hadolint to lint Dockerfiles language: system - types: ["dockerfile"] + types: [dockerfile] entry: hadolint - - repo: https://github.com/sqlfluff/sqlfluff - rev: 3.5.0 + - repo: local hooks: - - id: sqlfluff-lint - name: SQLFluff Lint - description: "Lints sql files with `SQLFluff`" + - id: sqruff-fix + name: SQL Format + description: Run 'sqruff fix' for SQL formatting + entry: uv run sqruff fix + language: python types: [sql] - - id: sqlfluff-fix - name: SQLFluff Fix - description: "Fixes sql lint errors with `SQLFluff`" + - id: sqruff-lint + name: SQL Lint + description: Run 'sqruff lint' for SQL linting + entry: uv run sqruff lint + language: python types: [sql] ci: diff --git a/.sqlfluff b/.sqlfluff deleted file mode 100644 index f2b8c817..00000000 --- a/.sqlfluff +++ /dev/null @@ -1,14 +0,0 @@ -[sqlfluff] -dialect = bigquery -max_line_length = 80 - -exclude_rules = - -[sqlfluff:indentation] -tab_space_size = 2 - -[sqlfluff:rules:ambiguous.join] -fully_qualify_join_types = both - -[sqlfluff:rules:structure.unused_join] -forbid_unused_join = True diff --git a/.sqruff b/.sqruff new file mode 100644 index 00000000..538ca889 --- /dev/null +++ b/.sqruff @@ -0,0 +1,15 @@ +[sqruff] +dialect = bigquery +templater = jinja +sql_file_exts = .sql +max_line_length = 80 +exclude_rules = +rules = all + +[sqruff:indentation] +indent_unit = space +tab_space_size = 2 +indented_joins = True + +[sqruff:rules:ambiguous.join] +fully_qualify_join_types = both diff --git a/.sqlfluffignore b/.sqruffignore similarity index 99% rename from .sqlfluffignore rename to .sqruffignore index 85d3f0cb..4d6df9a4 100644 --- a/.sqlfluffignore +++ b/.sqruffignore @@ -194,4 +194,3 @@ cython_debug/ # dbt dbt_packages/ logs/ -target/ diff --git a/.vscode/cspell.json b/.vscode/cspell.json index 20de7405..98127ed8 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -10,6 +10,7 @@ "apdisk", "autoflake", "autolabeler", + "basedpyright", "beartype", "buildkit", "buildx", @@ -17,6 +18,7 @@ "celerybeat", "charliermarsh", "classmethod", + "codebook", "commitable", "configfile", "connor", @@ -86,6 +88,7 @@ "pytype", "pyupgrade", "qodo", + "quary", "redoc", "reviewdog", "rootdir", @@ -98,14 +101,17 @@ "spyderproject", "spyproject", "sqlalchemy", - "sqlfluff", + "sqruff", + "sqruffignore", "stmts", "superfences", "tamasfe", "templater", "testpaths", "timemachine", + "tombi", "toolsai", + "trunc", "typer", "uline", "unittests", diff --git a/.vscode/extensions.json b/.vscode/extensions.json index f986eff4..bedd1548 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -14,9 +14,9 @@ "njpwerner.autodocstring", "oderwat.indent-rainbow", "pkief.material-icon-theme", + "quary.sqruff", "redhat.vscode-yaml", "shardulm94.trailing-spaces", - "sqlfluff.vscode-sqlfluff", "streetsidesoftware.code-spell-checker", "tamasfe.even-better-toml", "usernamehw.errorlens", diff --git a/.vscode/settings.json b/.vscode/settings.json index 6f05c582..c653022a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ "notebook.source.organizeImports": "explicit" }, "notebook.formatOnSave.enabled": true, - "python.defaultInterpreterPath": ".venv/bin/python", + "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", "python.languageServer": "None", "python.testing.autoTestDiscoverOnSaveEnabled": false, "python.testing.pytestEnabled": true, @@ -17,10 +17,6 @@ "tests" ], "python.testing.unittestEnabled": false, - "sqlfluff.config": ".sqlfluff", - "sqlfluff.executablePath": ".venv/bin/sqlfluff", - "sqlfluff.format.enabled": true, - "sqlfluff.linter.run": "onType", "terminal.integrated.defaultProfile.linux": "zsh", "terminal.integrated.profiles.linux": { "zsh": { @@ -52,7 +48,7 @@ "editor.tabSize": 4 }, "[sql]": { - "editor.defaultFormatter": "sqlfluff.vscode-sqlfluff", + "editor.defaultFormatter": "Quary.sqruff", "editor.tabSize": 2 }, "[toml]": { diff --git a/.zed/settings.json b/.zed/settings.json index a6895612..5840bb6b 100644 --- a/.zed/settings.json +++ b/.zed/settings.json @@ -19,9 +19,11 @@ "tab_size": 4 }, "SQL": { + "language_servers": ["sqruff"], "formatter": { "language_server": { "name": "sqruff" } }, + "format_on_save": "on", "tab_size": 2 }, "TOML": { diff --git a/CLAUDE.md b/CLAUDE.md index b3522004..118ed7a5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -45,20 +45,20 @@ uv run pytest # Format code with Ruff uv run nox -s fmt -- --ruff -# Format SQL files with SQLFluff -uv run nox -s fmt -- --sqlfluff +# Format SQL files with sqruff +uv run nox -s fmt -- --sqruff # Format both Python and SQL -uv run nox -s fmt -- --ruff --sqlfluff +uv run nox -s fmt -- --ruff --sqruff -# Lint with all tools (Ruff, SQLFluff, ty) -uv run nox -s lint -- --ruff --sqlfluff --ty +# Lint with all tools (Ruff, sqruff, ty) +uv run nox -s lint -- --ruff --sqruff --ty # Lint with Ruff only uv run nox -s lint -- --ruff # Lint SQL files only -uv run nox -s lint -- --sqlfluff +uv run nox -s lint -- --sqruff # Lint with ty only uv run nox -s lint -- --ty @@ -67,9 +67,9 @@ uv run nox -s lint -- --ty uv run ruff check . --fix uv run ruff format . -# Run SQLFluff directly -uv run sqlfluff lint . -uv run sqlfluff fix . +# Run sqruff directly +uv run sqruff lint +uv run sqruff fix # Run ty directly uv run ty check @@ -176,11 +176,10 @@ Tests in `tests/tools/` mirror the package structure: - Reports: HTML + terminal - Import mode: importlib -**SQLFluff (.sqlfluff)**: +**sqruff (.sqruff)**: - Dialect: BigQuery - Max line length: 80 - Tab space size: 2 -- Custom rules for join qualification and unused joins ### Nox Task Automation @@ -199,8 +198,8 @@ def lint(session: nox.Session) -> None: session.run("uv", "run", "ty", "check") if args.ruff: session.run("uv", "run", "ruff", "check", ".", "--fix") - if args.sqlfluff: - session.run("uv", "run", "sqlfluff", "lint", ".") + if args.sqruff: + session.run("uv", "run", "sqruff", "lint") ``` ## Key Patterns for Development diff --git a/codebook.toml b/codebook.toml index 5beb8e40..67287830 100644 --- a/codebook.toml +++ b/codebook.toml @@ -1,4 +1,5 @@ -words = [ +words = [ + "actionlint", "addopts", "anyio", "apdisk", @@ -31,6 +32,7 @@ words = [ "fontawesome", "fseventsd", "googlecloud", + "hadolint", "htmlcov", "imread", "ipykernel", @@ -94,7 +96,6 @@ words = [ "spyderproject", "spyproject", "sqlalchemy", - "sqlfluff", "sqruff", "stmts", "superfences", @@ -113,5 +114,5 @@ words = [ "venv", "webassets", "yzhang", - "zenkaku" + "zenkaku", ] diff --git a/docs/configurations/index.md b/docs/configurations/index.md index c81e2bc9..7044f38e 100644 --- a/docs/configurations/index.md +++ b/docs/configurations/index.md @@ -8,7 +8,7 @@ The development environment includes configuration files for: - **uv** - Package management and Python version - **Ruff** - Linting and formatting rules -- **SQLFluff** - Linting and formatting rules for SQL +- **sqruff** - Linting and formatting rules for SQL - **ty** - Type checking strictness - **pytest** - Testing and coverage - **pre-commit** - Automated quality checks @@ -22,7 +22,7 @@ Each tool is configured through dedicated configuration files in the repository | `pyproject.toml` | uv, Project | Dependencies and project metadata | | `ruff.toml` | Ruff | Linting and formatting rules | | `ty.toml` | ty | Type checking configuration | -| `.sqlfluff` | SQLFluff | SQL linting and formatting rules | +| `.sqruff` | sqruff | SQL linting and formatting rules | | `pytest.ini` | pytest | Testing and coverage settings | | `.pre-commit-config.yaml` | pre-commit | Hook definitions | | `noxfile.py` | nox | Task automation | @@ -53,25 +53,25 @@ Understand Ruff's linting and formatting rules: [→ Read full Ruff configuration guide](ruff.md) -### SQLFluff Configuration +### sqruff Configuration Configure SQL linting and formatting: - SQL dialect (BigQuery) - Line length (80 characters) - Indentation (2 spaces) - Custom rules for SQL best practices -**Key file**: `.sqlfluff` +**Key file**: `.sqruff` **Quick reference:** ```bash # Lint SQL files -uv run sqlfluff lint . +uv run sqruff lint # Fix SQL files -uv run sqlfluff fix . +uv run sqruff fix # Use via nox -uv run nox -s lint -- --sqlfluff +uv run nox -s lint -- --sqruff ``` ### [ty Configuration](ty.md) diff --git a/docs/configurations/pre-commit.md b/docs/configurations/pre-commit.md index 6d3912d4..db314887 100644 --- a/docs/configurations/pre-commit.md +++ b/docs/configurations/pre-commit.md @@ -10,9 +10,9 @@ - [https://github.com/astral-sh/ruff-pre-commit](https://github.com/astral-sh/ruff-pre-commit) - Ruff Lint - Ruff Format -- [https://github.com/sqlfluff/sqlfluff](https://github.com/sqlfluff/sqlfluff) - - SQLFluff Lint - - SQLFluff Fix +- [https://github.com/quarylabs/sqruff](https://github.com/quarylabs/sqruff) + - sqruff Lint + - sqruff Fix - [https://github.com/rhysd/actionlint](https://github.com/rhysd/actionlint) - actionlint - [https://github.com/hadolint/hadolint](https://github.com/hadolint/hadolint) @@ -27,52 +27,86 @@ repos: rev: v5.0.0 hooks: - id: end-of-file-fixer + name: End of file fixer + description: Ensure files end with a newline + - id: check-json + name: Check JSON + description: Check that JSON files are valid + - id: check-toml + name: Check TOML + description: Check that TOML files are valid + - id: check-xml + name: Check XML + description: Check that XML files are valid + - id: check-yaml + name: Check YAML + description: Check that YAML files are valid + - id: detect-private-key + name: Detect private key + description: Detect private keys in files + - id: trailing-whitespace + name: Trailing whitespace + description: Remove trailing whitespace from files - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.12.8 hooks: - - id: ruff - name: Ruff check - description: "Run 'ruff check' for extremely fast Python linting" + - id: ruff-format + name: Python Format + description: Run 'ruff format' for extremely fast Python formatting + + - id: ruff-lint + name: Python Lint + description: Run 'ruff check' for extremely fast Python linting args: [--fix] - - id: ruff-format - name: Ruff format - description: "Run 'ruff format' for extremely fast Python formatting" + - repo: local + hooks: + - id: ty + name: Python Type Check + description: Run 'ty check' for Python type checking + entry: uv run ty check + language: python + types: [python] - repo: https://github.com/rhysd/actionlint rev: v1.7.10 hooks: - id: actionlint + name: GitHub Actions Lint + description: Lint GitHub Actions workflows - repo: https://github.com/hadolint/hadolint rev: v2.12.0 hooks: - id: hadolint - name: Lint Dockerfiles + name: Dockerfile Lint description: Runs hadolint to lint Dockerfiles language: system types: ["dockerfile"] entry: hadolint - - repo: https://github.com/sqlfluff/sqlfluff - rev: 3.5.0 + - repo: local hooks: - - id: sqlfluff-lint - name: SQLFluff Lint - description: "Lints sql files with `SQLFluff`" - types: [sql] - - - id: sqlfluff-fix - name: SQLFluff Fix - description: "Fixes sql lint errors with `SQLFluff`" - types: [sql] + - id: sqruff-fix + name: SQL Format + description: Run 'sqruff fix' for SQL formatting + entry: uv run sqruff fix + language: python + types: [python] + + - id: sqruff-lint + name: SQL Lint + description: Run 'sqruff lint' for SQL linting + entry: uv run sqruff lint + language: python + types: [python] ci: autoupdate_schedule: weekly diff --git a/docs/configurations/uv.md b/docs/configurations/uv.md index 1dfad60d..5204fadd 100644 --- a/docs/configurations/uv.md +++ b/docs/configurations/uv.md @@ -14,6 +14,7 @@ Set the `UV_PROJECT_ENVIRONMENT` not to create a virtual environment in the proj "runServices": [ "vscode" ], + "remoteUser": "vscode", "workspaceFolder": "/workspace", "mounts": [ { @@ -45,26 +46,28 @@ Set the `UV_PROJECT_ENVIRONMENT` not to create a virtual environment in the proj "mosapride.zenkaku", "ms-azuretools.vscode-docker", "ms-python.python", - "ms-python.vscode-pylance", "ms-toolsai.jupyter", "njpwerner.autodocstring", + "quary.sqruff", "redhat.vscode-yaml", "shardulm94.trailing-spaces", - "sqlfluff.vscode-sqlfluff", "streetsidesoftware.code-spell-checker", "tamasfe.even-better-toml", "yzhang.markdown-all-in-one" - ] + ], + "settings": { + "python.defaultInterpreterPath": "./.venv/bin/python", + "sqruff.executablePath": "${workspaceFolder}/.venv/bin/sqruff" + } } }, "containerEnv": { "DISPLAY": "dummy", "UV_PROJECT_ENVIRONMENT": "${containerWorkspaceFolder}/.venv" }, - "updateContentCommand": "sudo chown -R vscode ${containerWorkspaceFolder}/.venv /home/${remoteUser}/.ssh", + "updateContentCommand": "sudo chown -R vscode /home/vscode/.cache /home/vscode/.ssh ${containerWorkspaceFolder}/.venv", "postCreateCommand": "uv sync --frozen", - "postStartCommand": "uv run pre-commit install", - "remoteUser": "vscode" + "postStartCommand": "uv run pre-commit install" } ``` diff --git a/docs/guides/index.md b/docs/guides/index.md index 6010f6dd..321b8788 100644 --- a/docs/guides/index.md +++ b/docs/guides/index.md @@ -9,7 +9,7 @@ This template includes several modern Python development tools, each serving a s - **uv** - Ultra-fast package management (10-100x faster than pip) - **Ruff** - Lightning-fast linting and formatting - **ty** - Advanced type checking -- **SQLFluff** - SQL linting and formatting +- **sqruff** - SQL linting and formatting - **actionlint** - GitHub Actions workflow linting - **pytest** - Comprehensive testing framework - **nox** - Task automation and workflow management @@ -24,16 +24,16 @@ This template includes several modern Python development tools, each serving a s ```bash # Format code -uv run nox -s fmt -- --ruff # Format Python code -uv run nox -s fmt -- --sqlfluff # Format SQL code -uv run nox -s fmt -- --ruff --sqlfluff # Format both +uv run nox -s fmt -- --ruff --sqruff # Format both +uv run nox -s fmt -- --ruff # Format Python code +uv run nox -s fmt -- --sqruff # Format SQL code # Run linters (you can specify which ones) -uv run nox -s lint -- --ruff --sqlfluff --ty # All linters -uv run nox -s lint -- --ruff --ty # Python only -uv run nox -s lint -- --ruff # Ruff only -uv run nox -s lint -- --sqlfluff # SQL only -uv run nox -s lint -- --ty # ty only +uv run nox -s lint -- --ruff --sqruff --ty # All linters +uv run nox -s lint -- --ruff --ty # Python only +uv run nox -s lint -- --ruff # Ruff only +uv run nox -s lint -- --sqruff # SQL only +uv run nox -s lint -- --ty # ty only # Run tests with coverage (75% minimum required) uv run nox -s test diff --git a/docs/index.md b/docs/index.md index 25bda19a..ce74965c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -14,7 +14,7 @@ This repository provides a complete, batteries-included development environment - **Ultra-fast package management** - [uv](https://github.com/astral-sh/uv) is 10-100x faster than pip - **Lightning-fast code quality** - [Ruff](https://github.com/astral-sh/ruff) replaces Black, isort, Flake8, and more -- **SQL linting** - [SQLFluff](https://github.com/sqlfluff/sqlfluff) for SQL code quality +- **SQL linting** - [sqruff](https://github.com/quarylabs/sqruff) for SQL code quality - **GitHub Actions linting** - [actionlint](https://github.com/rhysd/actionlint) for workflow file quality - **Type safety** - ty for comprehensive type checking - **Automated testing** - pytest with 75% coverage requirement @@ -121,10 +121,10 @@ uv sync uv run nox -s fmt -- --ruff # Format SQL code -uv run nox -s fmt -- --sqlfluff +uv run nox -s fmt -- --sqruff # Run linters -uv run nox -s lint -- --ruff --sqlfluff --ty +uv run nox -s lint -- --ruff --sqruff --ty # Run tests uv run nox -s test diff --git a/noxfile.py b/noxfile.py index 836dc533..2c40afa1 100644 --- a/noxfile.py +++ b/noxfile.py @@ -16,7 +16,7 @@ class CLIArgs( cov_report: str = "" junitxml: str = "" ruff: bool = False - sqlfluff: bool = False + sqruff: bool = False ty: bool = False @classmethod @@ -46,13 +46,13 @@ def parse(cls, posargs: list[str]) -> CLIArgs: @nox.session(python=False) def fmt(session: nox.Session) -> None: - """Format the code using Ruff and SQLFluff. + """Format the code using Ruff and sqruff. Args: session (nox.Session): The Nox session object. Examples: - >>> uv run nox -s fmt -- --ruff --sqlfluff + >>> uv run nox -s fmt -- --ruff --sqruff """ args = CLIArgs.parse(session.posargs) @@ -60,20 +60,20 @@ def fmt(session: nox.Session) -> None: if args.ruff: session.run("uv", "run", "ruff", "format", ".") session.log("✅ Ruff formatting completed successfully.") - if args.sqlfluff: - session.run("uv", "run", "sqlfluff", "fix", ".") - session.log("✅ SQLFluff formatting completed successfully.") + if args.sqruff: + session.run("uv", "run", "sqruff", "fix") + session.log("✅ sqruff formatting completed successfully.") @nox.session(python=False) def lint(session: nox.Session) -> None: - """Lint the code using Ruff, SQLFluff, and ty. + """Lint the code using Ruff, sqruff, and ty. Args: session (nox.Session): The Nox session object. Examples: - >>> uv run nox -s lint -- --ruff --sqlfluff --ty + >>> uv run nox -s lint -- --ruff --sqruff --ty """ args = CLIArgs.parse(session.posargs) @@ -81,9 +81,9 @@ def lint(session: nox.Session) -> None: if args.ruff: session.run("uv", "run", "ruff", "check", ".", "--fix") session.log("✅ Ruff linting completed successfully.") - if args.sqlfluff: - session.run("uv", "run", "sqlfluff", "lint", ".") - session.log("✅ SQLFluff linting completed successfully.") + if args.sqruff: + session.run("uv", "run", "sqruff", "lint") + session.log("✅ sqruff linting completed successfully.") if args.ty: session.run("uv", "run", "ty", "check") session.log("✅ ty linting completed successfully.") diff --git a/pyproject.toml b/pyproject.toml index 2454ca2a..33be266f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,8 +29,9 @@ dev = [ "pre-commit>=4.6.0", "pytest>=9.0.3", "pytest-cov>=7.1.0", + "regex>=2026.7.19", "ruff>=0.15.15", - "sqlfluff>=4.2.1", + "sqruff>=0.40.0", "ty>=0.0.40", ] diff --git a/uv.lock b/uv.lock index d6ba40ac..ec37a352 100644 --- a/uv.lock +++ b/uv.lock @@ -333,53 +333,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, ] -[[package]] -name = "chardet" -version = "7.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b1/51/cd61c567092a6cec796144510a68aff158ebfc1df82950a45bae65f28413/chardet-7.6.0.tar.gz", hash = "sha256:93d9df6089ded42ed1fe9f57e272c0b74bd0464d45c0c7d50f09f26f31105c3c", size = 914462, upload-time = "2026-08-14T20:36:59.305Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/2e/d8634bee23a07bf512512ddf6218a68e47f045ae061c0cc80657ed79dcc0/chardet-7.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6424512f576fa7e88b7431d38a42d57552c8f717465a975fc42e497cd280d833", size = 1088243, upload-time = "2026-08-14T20:36:17.135Z" }, - { url = "https://files.pythonhosted.org/packages/55/95/bd6d59026638cec47dace85858171fbecadd2f9e58cb2b973dc515aa790c/chardet-7.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:284136186ff90735f901ed0a1c6d41e7af67c666841cc0eceb58482a21b7056c", size = 1068688, upload-time = "2026-08-14T20:36:19.183Z" }, - { url = "https://files.pythonhosted.org/packages/7f/4a/60ed03656b28c1f4d378bc3cfe8a6cdda62c7c289398f925610fbbabfd00/chardet-7.6.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e9b31b9ae93872d66439b046a1e08c2ea99791f3c254dce1e2633e395c5587c", size = 1487945, upload-time = "2026-08-14T20:36:20.64Z" }, - { url = "https://files.pythonhosted.org/packages/03/25/9c8db4f951e974a4db5558d9eea62e1fd5b5889c9d0ad0315eed67c5cdb3/chardet-7.6.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa03322e07ac08d520ec50bb50c73143d0892d1adc067d4c5e58f4ef4b2363a8", size = 1510112, upload-time = "2026-08-14T20:36:22.248Z" }, - { url = "https://files.pythonhosted.org/packages/76/1b/59eb88a78d8f5855c27c25788088df82834ad067f3dddaf4d86ef03cf2d3/chardet-7.6.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0ad9bc6dab4f338673353fa3f0dc96122f559aaf746087408106e2fcbf132fe8", size = 1462470, upload-time = "2026-08-14T20:36:23.557Z" }, - { url = "https://files.pythonhosted.org/packages/02/af/46c80c317f9b4dd61f15c33b1e073fbdd64d13c70fe19e34943071dc9e50/chardet-7.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:360260d074d8712ac1e9048fcafb0fdde246f9d0b12555748ad0017c5ecee43d", size = 1157092, upload-time = "2026-08-14T20:36:25.082Z" }, - { url = "https://files.pythonhosted.org/packages/6f/62/64da80dad0c804e743b4156f379183578f1e33918856ae928dc9248a6002/chardet-7.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:19fea52164e6e00f2a21ed418f42e4b0162a09199274c86d07ad3efd661317c4", size = 1094073, upload-time = "2026-08-14T20:36:26.53Z" }, - { url = "https://files.pythonhosted.org/packages/44/99/934fb862d102c8756008597f4398323f32cef329f16e87fbb3bf76d4f4be/chardet-7.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a12023d48d0e207791c01161d03cb3c0d85c6a15f345eb9d3d56063a63d1e40f", size = 1071612, upload-time = "2026-08-14T20:36:28.067Z" }, - { url = "https://files.pythonhosted.org/packages/71/e9/b04e0ec576a77e79fe37279a9a5d5b1ae752d365e43df2eca0d0eee4cea5/chardet-7.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:249993b88ac7a58cad2781acea8f379152a28a719c9b401d614898c63a8c83da", size = 1489219, upload-time = "2026-08-14T20:36:29.357Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a2/c4d99299e9ce7fad561f8bb56babbbbdd3bb6b4fbd7c0ec674c1dbdd2cc5/chardet-7.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2cf0adaca8b1c4bacfade9d0a1e4f8f70b1bb122833d6f07ab90e3adc84eb13a", size = 1518293, upload-time = "2026-08-14T20:36:30.879Z" }, - { url = "https://files.pythonhosted.org/packages/56/1d/49f13052b74303bab2789d098063cbd19758217949ea54ffa216b6098cb3/chardet-7.6.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cf6d08c2373b7772a558d141f9e8cee53fe1d222341bac612e4d558b04995f73", size = 1459077, upload-time = "2026-08-14T20:36:32.149Z" }, - { url = "https://files.pythonhosted.org/packages/0d/53/8da1f4758286efd8faf71356facddb382788ecf1bbd7c70d63e2e18a4898/chardet-7.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:406936df1328a3284fef366eaa2bfd1cccd0ef1b10cb99781dd5b022ea644b84", size = 1160778, upload-time = "2026-08-14T20:36:33.436Z" }, - { url = "https://files.pythonhosted.org/packages/a3/29/16a7419edfbd60e901e6a797cbc3e038cb2a81903bc16c029db755f0156f/chardet-7.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:57e6846cc13ce1ff59979f4ec9da770c57e12aa99046073f632de5a51d9a6f20", size = 1088449, upload-time = "2026-08-14T20:36:34.723Z" }, - { url = "https://files.pythonhosted.org/packages/1d/36/3a14b0f8ddeb302f157281ca656a3ce6874b78e2d6af03682f520b487245/chardet-7.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:089e3bb81a0a07e94f15461ded9f9ee66d349615b1a9fd557d4de1003e2fc12e", size = 1065126, upload-time = "2026-08-14T20:36:36.21Z" }, - { url = "https://files.pythonhosted.org/packages/d2/4c/f59a39c2bfe4ac99baba8da842e8d2ea0b84dff7ba53a96e7ad8c71602d7/chardet-7.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:43ea433e43a23c55e8e17f3fad1e07f5cfe5450c73124b95b0d849c21ad379ee", size = 1482492, upload-time = "2026-08-14T20:36:37.649Z" }, - { url = "https://files.pythonhosted.org/packages/bd/eb/93e8036681157f2217a18769927a035984526e6dbd5e91f28a375ca41c14/chardet-7.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2b5d31f9b7f793e15e81cca877e7ccd72bffffa2a3443a9d47be9dfee84fad69", size = 1514185, upload-time = "2026-08-14T20:36:39.119Z" }, - { url = "https://files.pythonhosted.org/packages/10/04/0066d7ab2c135e404a6fa166bb7fa49d1c7bf7af07b86ed95b1c48a348c7/chardet-7.6.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c54b6a8d3b219560fa5cf4c28df932c37471afe047afdc152067104e741f38c1", size = 1454420, upload-time = "2026-08-14T20:36:40.549Z" }, - { url = "https://files.pythonhosted.org/packages/6c/9f/e965f1d9eddfb86cf118f980d329cbee43c4ac4b562448b369a6b6ef36af/chardet-7.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:b3b4c96c4df93899b3c8b9e8159e06b1f55c66d7ca384d91481108e251a06eb0", size = 1159067, upload-time = "2026-08-14T20:36:41.816Z" }, - { url = "https://files.pythonhosted.org/packages/cf/78/e14991c9487277ed7d006fff58f3084ac792ed94cced081788abb95df70c/chardet-7.6.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c6061adf247ab5dda173b67010e13904c6071717660c7c8077fb50aca362b264", size = 1087678, upload-time = "2026-08-14T20:36:43.2Z" }, - { url = "https://files.pythonhosted.org/packages/7a/40/0f95e04cb1820e0a582cd6d86bbf26be8302a94ccf330f8ba5f69735389d/chardet-7.6.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fc1e1571321baf8927582fe34363ad7f02279f11c8c2839c14b4c76894148db6", size = 1065310, upload-time = "2026-08-14T20:36:44.489Z" }, - { url = "https://files.pythonhosted.org/packages/3b/a1/04404dcc9d6e1253b02583e562d2c7ddca50a7e91f460d62eff7e1d07c92/chardet-7.6.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8900f6c7cf6b015b17a51767cc6144689059ba1cdceaa383d29eb037ac28579e", size = 1485028, upload-time = "2026-08-14T20:36:45.797Z" }, - { url = "https://files.pythonhosted.org/packages/f4/88/360064c4c7d9d0664561dae03b74c871d2f5332b329f5c99f1c997fb869a/chardet-7.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cedbc584789eb2edfde20fd03669972a833ce6019e60014ae613f9bfc440e8e3", size = 1510242, upload-time = "2026-08-14T20:36:47.206Z" }, - { url = "https://files.pythonhosted.org/packages/43/4c/302869fa1c69a5a41e4e78782680b12552ffd4286c3ae3c839b7b8df53d4/chardet-7.6.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d5dc835e40e0e09c2c3eab43731a8b5127834f42786dda09ba2f4b699ccd527a", size = 1456456, upload-time = "2026-08-14T20:36:48.668Z" }, - { url = "https://files.pythonhosted.org/packages/7c/a9/ff4fef15ed25fc3f945a3b981ae0f43c8559b3fbedb40267e59e583d105b/chardet-7.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:0f304de7041afaec0195ad6464937cd112392002e9d72ed15d55f20a9abd3a13", size = 1159103, upload-time = "2026-08-14T20:36:50.107Z" }, - { url = "https://files.pythonhosted.org/packages/31/44/94e6f89485ce6c630e8fec6d388e3fa747e58b7246b0cc8c5c532ba98650/chardet-7.6.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a4f0a368ad04d5def08bdfaa17c7e15e71552f93923dc2aa9b2f7d9dee02fbb6", size = 1120302, upload-time = "2026-08-14T20:36:51.484Z" }, - { url = "https://files.pythonhosted.org/packages/e0/cd/8e68ba12f13aaf4ee82d54ef8a1f83d62942e7a6bc1e579dd2d530a3e26e/chardet-7.6.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:75d6c3a4d2046d49e83d2d2206eb073a1f390743e856d90c1bbc19949b26acf4", size = 1093157, upload-time = "2026-08-14T20:36:52.987Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f6/6a35342b9efa69dcceab0ea8966571c6442a59c336bf460f0a2af95ed234/chardet-7.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:459e2b1c98f9a86a4698112aa42dffa802bbbff883c1ff144071f87224125862", size = 1521213, upload-time = "2026-08-14T20:36:54.812Z" }, - { url = "https://files.pythonhosted.org/packages/df/8c/8f09bfabbaedae45caa72b996e96d5e3f6436dfddc55c1311ffa2f6bd7d2/chardet-7.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bdb6f03107b7ace3f44e0edd91aa24456ee558787df265cc19daf45785b31c7", size = 1528427, upload-time = "2026-08-14T20:36:56.224Z" }, - { url = "https://files.pythonhosted.org/packages/0c/3d/2540627b193112e08b8045f3cad9295570866208555aa6625b63cc69c6cd/chardet-7.6.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:0c44a32da32cc8b23d6b20d98ace15ec7600950e4955d1bf5ab1f849b0187fdb", size = 1087374, upload-time = "2026-08-14T21:04:14.994Z" }, - { url = "https://files.pythonhosted.org/packages/fe/de/dac4f550cde73c4732b4916e72ec489ae36933fbbd1697e4122d3ae2e9dd/chardet-7.6.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:7bbc8a9652c7f859c593847f220c1d264f25749369abb1a267b404ee8cceb209", size = 1064688, upload-time = "2026-08-14T21:04:16.806Z" }, - { url = "https://files.pythonhosted.org/packages/06/45/f4f3f288496797d2cf1d1e9036f920ed2b4c79787b21c42a3314f4a6d532/chardet-7.6.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83512a475a2f3886166aa0bca1bbb39343a4eb3186dd5532127d6f2591d09118", size = 1486320, upload-time = "2026-08-14T21:04:18.535Z" }, - { url = "https://files.pythonhosted.org/packages/c0/81/3ca30c16e6c6015b737fca22d9342957cc617d8a65329d3e963ad754a31b/chardet-7.6.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:271ab71ec1be61dbbce0436de0848895c03eae051c379e937a39573d9ce403d9", size = 1515374, upload-time = "2026-08-14T21:04:20.724Z" }, - { url = "https://files.pythonhosted.org/packages/6e/98/163a75b8b3372a6b6503f5f5a4154a222ac135c7a706b5d176f8e4b237a2/chardet-7.6.0-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:da86fc1b40ff5996fbb5e4c2d2dca770eac2c893cef157dacc050b8b4d929846", size = 1469504, upload-time = "2026-08-14T21:04:22.352Z" }, - { url = "https://files.pythonhosted.org/packages/d7/4f/3ad1b1bd27ae7f0d3d13cf711366525cd781a9e067950d8a09aa280916cb/chardet-7.6.0-cp315-cp315-win_amd64.whl", hash = "sha256:b73f277c1ac09c4f8076c4214b816c7aa78a0a2f0cb7156742f4303f856bedc3", size = 1158551, upload-time = "2026-08-14T21:04:24.259Z" }, - { url = "https://files.pythonhosted.org/packages/8d/92/22a609c68c5123ebdccd8fe1a80e423609012ce20166de19a2ed3955b2f7/chardet-7.6.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:61238d5945b36af9a2ad13494f8969b7deb3c3b4abe223e54670c064e73f5328", size = 1119186, upload-time = "2026-08-14T21:04:25.761Z" }, - { url = "https://files.pythonhosted.org/packages/29/35/75a90143e4200e197f4f6cf5895d379e22bc785d0c7711120df18fa5347c/chardet-7.6.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:f2ec3c78cc6b54bf8e091ec4ee885473078b5d7ef18ab1b01c86ae1e98bf88f7", size = 1092596, upload-time = "2026-08-14T21:04:27.884Z" }, - { url = "https://files.pythonhosted.org/packages/d1/2c/b6d5f47d878c46e04ae6fcb58e0969467925bc0819b333c682e0c41bbc5c/chardet-7.6.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:167d7ba3ee08b654e36d7b43ebd9a36606c9a12e2fabdb361757a095ca3b7e3d", size = 1516644, upload-time = "2026-08-14T21:04:29.624Z" }, - { url = "https://files.pythonhosted.org/packages/25/d2/2bc3f1066c6f27bc3fa3a98dfd8a2a9c1e969a9d6bdc1edcd35278791fc4/chardet-7.6.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f14f46ef1977e41ce1f4814ca6984cea7f8b6baf8cbc6626ef7bf3d13cf7ea13", size = 1533221, upload-time = "2026-08-14T21:04:31.39Z" }, - { url = "https://files.pythonhosted.org/packages/cf/6e/5a0b348fa4cd7847567a28c6e697ccf58391960bfd13a6e7473ee23ca2f2/chardet-7.6.0-py3-none-any.whl", hash = "sha256:4076d795897ce45239825956a1334e134322ecc4bfe84dbb12acd5390de0fbc1", size = 680279, upload-time = "2026-08-14T20:36:57.763Z" }, -] - [[package]] name = "charset-normalizer" version = "3.5.1" @@ -825,8 +778,9 @@ dev = [ { name = "pre-commit" }, { name = "pytest" }, { name = "pytest-cov" }, + { name = "regex" }, { name = "ruff" }, - { name = "sqlfluff" }, + { name = "sqruff" }, { name = "ty" }, ] @@ -850,8 +804,9 @@ dev = [ { name = "pre-commit", specifier = ">=4.6.0" }, { name = "pytest", specifier = ">=9.0.3" }, { name = "pytest-cov", specifier = ">=7.1.0" }, + { name = "regex", specifier = ">=2026.7.19" }, { name = "ruff", specifier = ">=0.15.15" }, - { name = "sqlfluff", specifier = ">=4.2.1" }, + { name = "sqruff", specifier = ">=0.40.0" }, { name = "ty", specifier = ">=0.0.40" }, ] @@ -876,21 +831,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a1/e4/da5f2f176050efcfb9222a76a3e81c41f69f775be8e563b76ca4292a134f/dependency_groups-1.3.2-py3-none-any.whl", hash = "sha256:8c337f7b92445823b0d0ea507f611390c58dcd2112be00aebcd738a2ca7a1c64", size = 9802, upload-time = "2026-08-22T02:43:28.853Z" }, ] -[[package]] -name = "diff-cover" -version = "10.5.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "chardet" }, - { name = "jinja2" }, - { name = "pluggy" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e6/74/b71a61b2610b5866aa29a9388bc1b58738e49600345dbe0598676b436717/diff_cover-10.5.1.tar.gz", hash = "sha256:f1c9417c62111e40a81c482c692c5cdd131ff93317baa993044cb291912ebba3", size = 113297, upload-time = "2026-08-16T18:09:19.466Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/da/ac0ad341c7377e82f7d6dcb18461029579da224c3923f73ff6537d8591cf/diff_cover-10.5.1-py3-none-any.whl", hash = "sha256:67ce07494e605b5d7d7b04aeec2cf524950ed0c12f026dd176883cf33c74fba0", size = 62924, upload-time = "2026-08-16T18:09:18.387Z" }, -] - [[package]] name = "distlib" version = "0.4.3" @@ -2922,25 +2862,37 @@ wheels = [ ] [[package]] -name = "sqlfluff" -version = "4.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "chardet" }, - { name = "click" }, - { name = "colorama" }, - { name = "diff-cover" }, - { name = "jinja2" }, - { name = "pathspec" }, - { name = "platformdirs" }, - { name = "pyyaml" }, - { name = "regex" }, - { name = "tblib" }, - { name = "tqdm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c8/06/c675066797f91a77d456bc15375a0a8c9b4765f1e66db639655772a928da/sqlfluff-4.3.0.tar.gz", hash = "sha256:aa647b3721112f1aca581efe8eaa815a332ae214610a0946592f98a19ef1e8cb", size = 1068771, upload-time = "2026-08-07T09:01:19.317Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/be/0be38ce154b9d798bb00b5ce65a3ad0e1ae2bc9419fcd8e3c773c2b80c70/sqlfluff-4.3.0-py3-none-any.whl", hash = "sha256:582e12af5101bd1c5bc120cb4a6942dadcfe5e5b1e01406f220dd08f5b3f31dd", size = 1051485, upload-time = "2026-08-07T09:01:17.139Z" }, +name = "sqruff" +version = "0.40.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/17/72/04630ce05381aa1e1159511a891f9a389d9b305860f29999a586e0c2aa39/sqruff-0.40.0.tar.gz", hash = "sha256:a99adfc4a7d3c7c62f35d9efb0ae0522263bd9f0036e978b0e14fab27462b564", size = 1247072, upload-time = "2026-08-14T13:30:53.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/3b/54bcfa5540b34072eb39084570ca9dfc7f0f17c9c4a370cdf445b10ededf/sqruff-0.40.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:2a72324b5327ca73e9672db25c93eb64e09d9d3672a07b9b3b5d99493b700bcf", size = 7006897, upload-time = "2026-08-14T13:30:32.878Z" }, + { url = "https://files.pythonhosted.org/packages/48/6f/d5894af18c41bb4d445a9adfc95108e25284e00c10025ec82aeeacfc1238/sqruff-0.40.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4a8fff13acfe75ee6a766e7eb21703af3f3aaf6f961232687a18068deaf9db6b", size = 6390298, upload-time = "2026-08-14T13:30:28.502Z" }, + { url = "https://files.pythonhosted.org/packages/ea/77/837e8b30cf1f8863e62c817a56258b924bb9905fba783a3a4224e3460c60/sqruff-0.40.0-cp314-cp314t-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0420ccdbf9dd82f72313457f3a1fcb77b81484462c92ca3db2726b185c05c0c2", size = 6695480, upload-time = "2026-08-14T13:30:19.492Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c7/feafd8b62e83a71339152f5cc40695b3c9b9246daab59ffa9b1d13ac50b9/sqruff-0.40.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:538d63907605d97bb6153523510f1e12409c5f2fe36cd03de6678839f6796dbc", size = 7021407, upload-time = "2026-08-14T13:30:05.803Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f8/a0c70ff7e3d19d6970d20fef0a5a784a3b3a02f93119b2cabfba3e486517/sqruff-0.40.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d4ce7182395fa0217906ee6cace98af8ba35cc0dcb0e6501291f6444c43a8142", size = 7894531, upload-time = "2026-08-14T13:30:10.765Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8b/d9e3467eb212c825255b60748f221c7a294d1e82a500638067959720bc3a/sqruff-0.40.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:439ecbe5325b03e40489fc0dc7a49e67f82a4b85daa893e43e2d4b16aeafc2a4", size = 7505030, upload-time = "2026-08-14T13:30:15.214Z" }, + { url = "https://files.pythonhosted.org/packages/92/89/150a2a3a4c127ff90196f05aa8d0176f91c6748c2b23c33a2d5a82990bc5/sqruff-0.40.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a891be2135a114da76ec000e9414dd7023b990a0a59beffce808afda16fb148", size = 7128539, upload-time = "2026-08-14T13:30:23.988Z" }, + { url = "https://files.pythonhosted.org/packages/d7/2a/96ba0a42ffee5d58a2b1fb21e0da535bc5641aff799898611e9f65f3a8d1/sqruff-0.40.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8c6f04b70c4d1cc2e81fb1882f1423621256641339dab8793b26d7b29f44d878", size = 7195155, upload-time = "2026-08-14T13:30:37.192Z" }, + { url = "https://files.pythonhosted.org/packages/27/4b/d6b667d174cbfe9caf69b3fb9accea83d2283e54ac733eda1ff6becf1e73/sqruff-0.40.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:e0da93b623853583fa9c758b809fd0b3e34ffe50b7c6ff604743f0431b19923a", size = 8169047, upload-time = "2026-08-14T13:30:41.319Z" }, + { url = "https://files.pythonhosted.org/packages/37/58/068107214a5a9c2da9c6727dbec9b85189b59e75f901bef6749c0b69ac99/sqruff-0.40.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:b864c16390afcbca2069ac480bdf805f770607ac649d5c3548f1c921b11bf466", size = 6665915, upload-time = "2026-08-14T13:30:45.532Z" }, + { url = "https://files.pythonhosted.org/packages/07/ce/6020be446797da4435393352aedb28f63eb8cce33bc561a03f00d90b0f09/sqruff-0.40.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b91f47b1101899e10fb885fbf7bf32e65d2415cf94f6af415f5d505a8e428d97", size = 7342279, upload-time = "2026-08-14T13:30:49.641Z" }, + { url = "https://files.pythonhosted.org/packages/01/dd/dcb47969b42274639d394c3d9371970fc28d9b457818a6d94680eaf7734d/sqruff-0.40.0-cp314-cp314t-win32.whl", hash = "sha256:2011e6a8bcfc45f0910f23ebae7bb390920d1ed6feaf514743c9bdf60790fd1e", size = 5497426, upload-time = "2026-08-14T13:31:00.227Z" }, + { url = "https://files.pythonhosted.org/packages/95/1c/2147a1cc8ffcfef697cd93d8d1ca9032638675fb60a2bd36b8662364b57a/sqruff-0.40.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b3fbb9c0cf54fc8034c4b2535280591da8868644970b96491c4f567f501dd35d", size = 7607192, upload-time = "2026-08-14T13:30:55.934Z" }, + { url = "https://files.pythonhosted.org/packages/90/d2/6937a54f0d08ad9e84fed0ee2226d6e689fcc3ae67d294cefe20a862e398/sqruff-0.40.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f6a714037ed2caf766d92bc81f08bb059f6e2cb39818de97224d614e3d842250", size = 7008162, upload-time = "2026-08-14T13:30:35.121Z" }, + { url = "https://files.pythonhosted.org/packages/d2/a9/12c0efe3d3d9fa556bb28cf13990849fb3b74bdf3bff1639bbcc7acc126e/sqruff-0.40.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:11f291e43d6848fd559c7e56d1cafc0af63770308306f8bd057fafef95c1786d", size = 6397593, upload-time = "2026-08-14T13:30:30.687Z" }, + { url = "https://files.pythonhosted.org/packages/18/12/e72ae1f2321ebf738f510efad2ed00a2eeb75c59d7efafb78d3e09800173/sqruff-0.40.0-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8e06e094e763bcebcb0985d67e91f35eafaa5c77c1d20bb542258126d2863429", size = 6698674, upload-time = "2026-08-14T13:30:21.628Z" }, + { url = "https://files.pythonhosted.org/packages/f4/11/b5ab2d611827817343b066f81b18e7732410464daaef55dc38751fd33a1d/sqruff-0.40.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74c387823799b66e0f0cfbeef79de34a65dd12753b0ed0c27ce4f0db089cfb49", size = 7022847, upload-time = "2026-08-14T13:30:08.301Z" }, + { url = "https://files.pythonhosted.org/packages/28/30/973737f3517dfd7de3a3392a24d884b1591bc269f1f8dc84c033d7d9c647/sqruff-0.40.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8008fcc3461187239e9848c0d6f0c67f1c477512119bbb3d89680bab3dec4c66", size = 7898037, upload-time = "2026-08-14T13:30:13.133Z" }, + { url = "https://files.pythonhosted.org/packages/02/a5/962f67df8c0788deca28de4a44d997eeff00d587df1348f04bbb54a427ff/sqruff-0.40.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e983a1388a899f290ff045b030d415d26df5155edbec6e9f75db954119aca838", size = 7505499, upload-time = "2026-08-14T13:30:17.235Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d7/9a1fd65971232c42223fb6bc1af8293de61979dd616602e42e421e0ecf31/sqruff-0.40.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85034fd714f2240191983b19aa3fc3196161ade5936c83a57c22259ab908d08e", size = 7129026, upload-time = "2026-08-14T13:30:26.244Z" }, + { url = "https://files.pythonhosted.org/packages/10/2e/f3784e87b1814f5198b26245f1183e80fc89d2d14d2cd65fe03f5832863d/sqruff-0.40.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:683030dbe9067626a66d5a3bf8bafdf71c99ba6ebd94b60c6e4e583c86856a99", size = 7195247, upload-time = "2026-08-14T13:30:39.236Z" }, + { url = "https://files.pythonhosted.org/packages/82/9f/09099323adc4aabf5f11162ffc946fa24da1ec42455443b3371015aaeef3/sqruff-0.40.0-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:e6887141e7f433fd5fefd3723e81c6383e5081686660b66b06538f9ed6ba41ec", size = 8171373, upload-time = "2026-08-14T13:30:43.478Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b2/a317d2644fe314bda0743ee0d497d36a62103b63f9ad042f44b53cc352d9/sqruff-0.40.0-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:4d4a1482ea11f8489602ff6767d6851f870e3c3bf019a3c18ebbd8f5867036e5", size = 6667724, upload-time = "2026-08-14T13:30:47.423Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b7/d1401d94c4e76c5c46bd1c7efeb60af7efd46fd97a77c39289fa9c6be878/sqruff-0.40.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81664009493783203a5b81bf3ae615a83cf14031ef31ede876b87f9298a259da", size = 7343703, upload-time = "2026-08-14T13:30:51.937Z" }, + { url = "https://files.pythonhosted.org/packages/98/36/d8185f0faa87c1b2f35f6744f848ec128a00243bc21145728c1d7e12edfa/sqruff-0.40.0-cp38-abi3-win32.whl", hash = "sha256:1eb44ce7e939a9a782cf0fcde06da440db8cb7264a2f67194332984f9f24d150", size = 5499320, upload-time = "2026-08-14T13:31:02.562Z" }, + { url = "https://files.pythonhosted.org/packages/49/f8/3cea655b3279b8e300fc301585fe652ad8514187367cfcf3e48c88bf08e5/sqruff-0.40.0-cp38-abi3-win_amd64.whl", hash = "sha256:225bbdf13dda2ea765f52da83c02a56fa4c0eeda2404a9c274391432546f1e93", size = 7610327, upload-time = "2026-08-14T13:30:58.097Z" }, ] [[package]] @@ -2957,15 +2909,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, ] -[[package]] -name = "tblib" -version = "3.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f4/8a/14c15ae154895cc131174f858c707790d416c444fc69f93918adfd8c4c0b/tblib-3.2.2.tar.gz", hash = "sha256:e9a652692d91bf4f743d4a15bc174c0b76afc750fe8c7b6d195cc1c1d6d2ccec", size = 35046, upload-time = "2025-11-12T12:21:16.572Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/02/be/5d2d47b1fb58943194fb59dcf222f7c4e35122ec0ffe8c36e18b5d728f0b/tblib-3.2.2-py3-none-any.whl", hash = "sha256:26bdccf339bcce6a88b2b5432c988b266ebbe63a4e593f6b578b1d2e723d2b76", size = 12893, upload-time = "2025-11-12T12:21:14.407Z" }, -] - [[package]] name = "terminado" version = "0.18.1" @@ -3081,18 +3024,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ad/3e/cd5e4f06e34cde33b8ef66cf36aa2b5ad46354cc1af7d2136bbe365fee1d/tornado-6.5.8-cp39-abi3-win_arm64.whl", hash = "sha256:68a7468c7e289f8514d7d664101753903217eff1bb6822c6b5994a0b5f5bcb26", size = 451411, upload-time = "2026-08-07T02:12:41.469Z" }, ] -[[package]] -name = "tqdm" -version = "4.70.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/21/3b/6c24bec5be5e743ffd99576daa5cc077722fc7d5bbc00bd133fa0c698dc6/tqdm-4.70.0.tar.gz", hash = "sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220", size = 795438, upload-time = "2026-07-27T11:33:15.271Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/1c/01bfd571a64e7f270e6bab5e33777debe0edc56759233ce84f27dec92d14/tqdm-4.70.0-py3-none-any.whl", hash = "sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953", size = 80184, upload-time = "2026-07-27T11:33:13.167Z" }, -] - [[package]] name = "traitlets" version = "5.16.1"