![]() Summary -- I've been noticing this failure in the formatter ecosystem check and decided to look into it. We fail to parse the [notebook](https://github.com/openai/openai-cookbook/blob/main/examples/mcp/databricks_mcp_cookbook.ipynb) because some of the `code` cells have non-Python code in them. `ruff format` only reports one of these, corresponding to a shell snippet, but `ruff check` emits some additional errors about JS code later in the file too: ``` databricks_mcp_cookbook.ipynb:cell 21:1:11: SyntaxError: Simple statements must be separated by newlines or semicolons databricks_mcp_cookbook.ipynb:cell 21:1:19: SyntaxError: Simple statements must be separated by newlines or semicolons databricks_mcp_cookbook.ipynb:cell 21:1:50: SyntaxError: Simple statements must be separated by newlines or semicolons databricks_mcp_cookbook.ipynb:cell 30:4:7: SyntaxError: Simple statements must be separated by newlines or semicolons databricks_mcp_cookbook.ipynb:cell 30:4:41: E703 Statement ends with an unnecessary semicolon databricks_mcp_cookbook.ipynb:cell 30:5:14: SyntaxError: Expected ':', found '{' databricks_mcp_cookbook.ipynb:cell 30:6:9: SyntaxError: Expected ',', found '{' databricks_mcp_cookbook.ipynb:cell 30:6:25: SyntaxError: Expected ',', found '=' databricks_mcp_cookbook.ipynb:cell 30:6:46: SyntaxError: Expected ',', found ';' databricks_mcp_cookbook.ipynb:cell 30:6:47: SyntaxError: Expected '}', found newline databricks_mcp_cookbook.ipynb:cell 30:7:1: SyntaxError: Unexpected indentation databricks_mcp_cookbook.ipynb:cell 30:7:13: SyntaxError: Expected ':', found 'break' databricks_mcp_cookbook.ipynb:cell 30:7:18: E703 Statement ends with an unnecessary semicolon databricks_mcp_cookbook.ipynb:cell 30:8:28: SyntaxError: Simple statements must be separated by newlines or semicolons databricks_mcp_cookbook.ipynb:cell 30:8:55: E703 Statement ends with an unnecessary semicolon databricks_mcp_cookbook.ipynb:cell 30:9:18: SyntaxError: Expected an expression databricks_mcp_cookbook.ipynb:cell 30:10:11: SyntaxError: Expected ',', found name databricks_mcp_cookbook.ipynb:cell 30:10:16: SyntaxError: Expected ',', found '=' databricks_mcp_cookbook.ipynb:cell 30:10:22: SyntaxError: Expected ',', found name databricks_mcp_cookbook.ipynb:cell 30:10:24: SyntaxError: Expected ',', found ';' databricks_mcp_cookbook.ipynb:cell 30:11:27: SyntaxError: Expected ',', found '=' databricks_mcp_cookbook.ipynb:cell 30:11:34: SyntaxError: Expected ',', found name databricks_mcp_cookbook.ipynb:cell 30:11:48: SyntaxError: Expected ',', found ';' databricks_mcp_cookbook.ipynb:cell 30:11:49: SyntaxError: Expected '}', found NonLogicalNewline databricks_mcp_cookbook.ipynb:cell 30:12:1: SyntaxError: Unexpected indentation databricks_mcp_cookbook.ipynb:cell 30:12:16: E703 Statement ends with an unnecessary semicolon databricks_mcp_cookbook.ipynb:cell 30:13:3: SyntaxError: Expected a statement databricks_mcp_cookbook.ipynb:cell 30:13:4: SyntaxError: Expected a statement databricks_mcp_cookbook.ipynb:cell 30:13:5: SyntaxError: Expected a statement databricks_mcp_cookbook.ipynb:cell 30:13:5: E703 Statement ends with an unnecessary semicolon databricks_mcp_cookbook.ipynb:cell 30:13:6: SyntaxError: Expected a statement databricks_mcp_cookbook.ipynb:cell 30:14:1: SyntaxError: Expected a statement databricks_mcp_cookbook.ipynb:cell 30:14:2: SyntaxError: Expected a statement ``` Test Plan -- This PR |
||
---|---|---|
.. | ||
ruff_ecosystem | ||
pyproject.toml | ||
README.md |
ruff-ecosystem
Compare lint and format results for two different ruff versions (e.g. main and a PR) on real world projects.
Installation
From the Ruff project root, install with uv:
uv tool install -e ./python/ruff-ecosystem
Usage
ruff-ecosystem <check | format> <baseline executable> <comparison executable>
Note executable paths may be absolute, relative to the current working directory, or will be looked up in the current Python environment and PATH.
Run ruff check
ecosystem checks comparing your debug build to your system Ruff:
ruff-ecosystem check ruff "./target/debug/ruff"
Run ruff format
ecosystem checks comparing your debug build to your system Ruff:
ruff-ecosystem format ruff "./target/debug/ruff"
Run ruff format
ecosystem checks comparing with changes to code that is already formatted:
ruff-ecosystem format ruff "./target/debug/ruff" --format-comparison ruff-then-ruff
Run ruff format
ecosystem checks comparing with the Black formatter:
ruff-ecosystem format black ruff -v --cache python/checkouts --format-comparison black-and-ruff
The default output format is markdown, which includes nice summaries of the changes. You can use --output-format json
to display the raw data — this is
particularly useful when making changes to the ecosystem checks.
Development
When developing, it can be useful to set the --pdb
flag to drop into a debugger on failure:
ruff-ecosystem check ruff "./target/debug/ruff" --pdb
You can also provide a path to cache checkouts to speed up repeated runs:
ruff-ecosystem check ruff "./target/debug/ruff" --cache ./repos