Show ty.toml file snippet in options reference

This commit is contained in:
Matthew Mckee 2025-12-22 16:49:31 +00:00 committed by Micha Reiser
parent aa21b70a8b
commit 9789140b97
No known key found for this signature in database
2 changed files with 290 additions and 95 deletions

View file

@ -3,6 +3,7 @@
use anyhow::bail;
use itertools::Itertools;
use pretty_assertions::StrComparison;
use ruff_python_trivia::textwrap;
use std::{fmt::Write, path::PathBuf};
use ruff_options_metadata::{OptionField, OptionSet, OptionsMetadata, Visit};
@ -167,7 +168,7 @@ fn emit_field(output: &mut String, name: &str, field: &OptionField, parents: &[S
let _ = writeln!(output, "**Type**: `{}`", field.value_type);
output.push('\n');
output.push_str("**Example usage**:\n\n");
output.push_str(&format_example(
output.push_str(&format_tab(
"pyproject.toml",
&format_header(
field.scope,
@ -178,16 +179,27 @@ fn emit_field(output: &mut String, name: &str, field: &OptionField, parents: &[S
field.example,
));
output.push('\n');
output.push_str(&format_tab(
"ty.toml",
&format_header(
field.scope,
field.example,
parents,
ConfigurationFile::TyToml,
),
field.example,
));
output.push('\n');
}
fn format_example(title: &str, header: &str, content: &str) -> String {
if header.is_empty() {
format!("```toml title=\"{title}\"\n{content}\n```\n",)
} else {
format!("```toml title=\"{title}\"\n{header}\n{content}\n```\n",)
}
fn format_tab(tab_name: &str, header: &str, content: &str) -> String {
format!(
"=== \"{}\"\n\n ```toml\n {}\n{}\n ```\n",
tab_name,
header,
textwrap::indent(content, " ")
)
}
/// Format the TOML header for the example usage for a given option.
///
/// For example: `[tool.ruff.format]` or `[tool.ruff.lint.isort]`.
@ -212,11 +224,20 @@ fn format_header(
if example.starts_with(&format!("[[{header}")) {
return String::new();
}
// Ex) `[tool.ty.rules]`
if example.starts_with(&format!("[{header}")) {
return String::new();
}
// Some examples show headers which would show up in `pyproject.toml`,
// so we much adjust the header to match the format of `ty.toml`
if matches!(configuration, ConfigurationFile::TyToml) {
if example.starts_with("[[tool.ty") || example.starts_with("[tool.ty") {
return header.replacen("tool.ty", "", 1);
}
}
if header.is_empty() {
String::new()
} else {
@ -243,7 +264,6 @@ impl Visit for CollectOptionsVisitor {
#[derive(Debug, Copy, Clone)]
enum ConfigurationFile {
PyprojectToml,
#[expect(dead_code)]
TyToml,
}

View file

@ -20,11 +20,23 @@ Valid severities are:
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.rules]
possibly-unresolved-reference = "warn"
division-by-zero = "ignore"
```
=== "pyproject.toml"
```toml
[tool.ty.rules]
possibly-unresolved-reference = "warn"
division-by-zero = "ignore"
```
=== "ty.toml"
```toml
[tool.ty.rules]
possibly-unresolved-reference = "warn"
division-by-zero = "ignore"
```
---
@ -75,10 +87,19 @@ configuration setting.
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.environment]
extra-paths = ["./shared/my-search-path"]
```
=== "pyproject.toml"
```toml
[tool.ty.environment]
extra-paths = ["./shared/my-search-path"]
```
=== "ty.toml"
```toml
[environment]
extra-paths = ["./shared/my-search-path"]
```
---
@ -106,10 +127,19 @@ This option can be used to point to virtual or system Python environments.
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.environment]
python = "./custom-venv-location/.venv"
```
=== "pyproject.toml"
```toml
[tool.ty.environment]
python = "./custom-venv-location/.venv"
```
=== "ty.toml"
```toml
[environment]
python = "./custom-venv-location/.venv"
```
---
@ -133,11 +163,21 @@ If no platform is specified, ty will use the current platform:
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.environment]
# Tailor type stubs and conditionalized type definitions to windows.
python-platform = "win32"
```
=== "pyproject.toml"
```toml
[tool.ty.environment]
# Tailor type stubs and conditionalized type definitions to windows.
python-platform = "win32"
```
=== "ty.toml"
```toml
[environment]
# Tailor type stubs and conditionalized type definitions to windows.
python-platform = "win32"
```
---
@ -167,10 +207,19 @@ to reflect the differing contents of the standard library across Python versions
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.environment]
python-version = "3.12"
```
=== "pyproject.toml"
```toml
[tool.ty.environment]
python-version = "3.12"
```
=== "ty.toml"
```toml
[environment]
python-version = "3.12"
```
---
@ -195,11 +244,21 @@ it will also be included in the first party search path.
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.environment]
# Multiple directories (priority order)
root = ["./src", "./lib", "./vendor"]
```
=== "pyproject.toml"
```toml
[tool.ty.environment]
# Multiple directories (priority order)
root = ["./src", "./lib", "./vendor"]
```
=== "ty.toml"
```toml
[environment]
# Multiple directories (priority order)
root = ["./src", "./lib", "./vendor"]
```
---
@ -215,10 +274,19 @@ bundled as a zip file in the binary
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.environment]
typeshed = "/path/to/custom/typeshed"
```
=== "pyproject.toml"
```toml
[tool.ty.environment]
typeshed = "/path/to/custom/typeshed"
```
=== "ty.toml"
```toml
[environment]
typeshed = "/path/to/custom/typeshed"
```
---
@ -268,15 +336,31 @@ If not specified, defaults to `[]` (excludes no files).
**Example usage**:
```toml title="pyproject.toml"
[[tool.ty.overrides]]
exclude = [
"generated",
"*.proto",
"tests/fixtures/**",
"!tests/fixtures/important.py" # Include this one file
]
```
=== "pyproject.toml"
```toml
[[tool.ty.overrides]]
exclude = [
"generated",
"*.proto",
"tests/fixtures/**",
"!tests/fixtures/important.py" # Include this one file
]
```
=== "ty.toml"
```toml
overrides
[[tool.ty.overrides]]
exclude = [
"generated",
"*.proto",
"tests/fixtures/**",
"!tests/fixtures/important.py" # Include this one file
]
```
---
@ -296,13 +380,27 @@ If not specified, defaults to `["**"]` (matches all files).
**Example usage**:
```toml title="pyproject.toml"
[[tool.ty.overrides]]
include = [
"src",
"tests",
]
```
=== "pyproject.toml"
```toml
[[tool.ty.overrides]]
include = [
"src",
"tests",
]
```
=== "ty.toml"
```toml
overrides
[[tool.ty.overrides]]
include = [
"src",
"tests",
]
```
---
@ -320,13 +418,27 @@ severity levels or disable them entirely.
**Example usage**:
```toml title="pyproject.toml"
[[tool.ty.overrides]]
include = ["src"]
=== "pyproject.toml"
[tool.ty.overrides.rules]
possibly-unresolved-reference = "ignore"
```
```toml
[[tool.ty.overrides]]
include = ["src"]
[tool.ty.overrides.rules]
possibly-unresolved-reference = "ignore"
```
=== "ty.toml"
```toml
overrides
[[tool.ty.overrides]]
include = ["src"]
[tool.ty.overrides.rules]
possibly-unresolved-reference = "ignore"
```
---
@ -386,15 +498,29 @@ to re-include `dist` use `exclude = ["!dist"]`
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.src]
exclude = [
"generated",
"*.proto",
"tests/fixtures/**",
"!tests/fixtures/important.py" # Include this one file
]
```
=== "pyproject.toml"
```toml
[tool.ty.src]
exclude = [
"generated",
"*.proto",
"tests/fixtures/**",
"!tests/fixtures/important.py" # Include this one file
]
```
=== "ty.toml"
```toml
[src]
exclude = [
"generated",
"*.proto",
"tests/fixtures/**",
"!tests/fixtures/important.py" # Include this one file
]
```
---
@ -427,13 +553,25 @@ matches `<project_root>/src` and not `<project_root>/test/src`).
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.src]
include = [
"src",
"tests",
]
```
=== "pyproject.toml"
```toml
[tool.ty.src]
include = [
"src",
"tests",
]
```
=== "ty.toml"
```toml
[src]
include = [
"src",
"tests",
]
```
---
@ -449,10 +587,19 @@ Enabled by default.
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.src]
respect-ignore-files = false
```
=== "pyproject.toml"
```toml
[tool.ty.src]
respect-ignore-files = false
```
=== "ty.toml"
```toml
[src]
respect-ignore-files = false
```
---
@ -478,10 +625,19 @@ it will also be included in the first party search path.
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.src]
root = "./app"
```
=== "pyproject.toml"
```toml
[tool.ty.src]
root = "./app"
```
=== "ty.toml"
```toml
[src]
root = "./app"
```
---
@ -499,11 +655,21 @@ Defaults to `false`.
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.terminal]
# Error if ty emits any warning-level diagnostics.
error-on-warning = true
```
=== "pyproject.toml"
```toml
[tool.ty.terminal]
# Error if ty emits any warning-level diagnostics.
error-on-warning = true
```
=== "ty.toml"
```toml
[terminal]
# Error if ty emits any warning-level diagnostics.
error-on-warning = true
```
---
@ -519,10 +685,19 @@ Defaults to `full`.
**Example usage**:
```toml title="pyproject.toml"
[tool.ty.terminal]
output-format = "concise"
```
=== "pyproject.toml"
```toml
[tool.ty.terminal]
output-format = "concise"
```
=== "ty.toml"
```toml
[terminal]
output-format = "concise"
```
---