Skip to content

Commit 43adae9

Browse files
committed
docs(linter): add version section to rules page (#21601)
1 parent d15dad2 commit 43adae9

7 files changed

Lines changed: 52 additions & 34 deletions

File tree

apps/oxlint/src/output_formatter/json.rs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ impl InternalFormatter for JsonOutputFormatter {
2626
scope: &'a str,
2727
value: &'a str,
2828
category: RuleCategory,
29+
#[cfg(feature = "ruledocs")]
2930
version: &'a str,
3031
type_aware: bool,
3132
fix: String,
@@ -50,6 +51,7 @@ impl InternalFormatter for JsonOutputFormatter {
5051
scope: rule.plugin_name(),
5152
value: rule.name(),
5253
category: rule.category(),
54+
#[cfg(feature = "ruledocs")]
5355
version: rule.version(),
5456
type_aware: rule.is_tsgolint_rule(),
5557
fix: rule.fix().to_string(),
@@ -155,7 +157,6 @@ mod test {
155157

156158
use oxc_diagnostics::{NamedSource, OxcDiagnostic, reporter::DiagnosticResult};
157159
use oxc_span::Span;
158-
use serde_json::Value;
159160

160161
use crate::output_formatter::{InternalFormatter, LintCommandInfo, json::JsonOutputFormatter};
161162

@@ -190,17 +191,4 @@ mod test {
190191
"{ \"diagnostics\": [{\"message\": \"error message\",\"severity\": \"warning\",\"causes\": [],\"filename\": \"file://test.ts\",\"labels\": [{\"span\": {\"offset\": 0,\"length\": 8,\"line\": 1,\"column\": 1}}],\"related\": []}],\n \"number_of_files\": 0,\n \"number_of_rules\": 0,\n \"threads_count\": 1,\n \"start_time\": 0\n }\n "
191192
);
192193
}
193-
194-
#[test]
195-
fn all_rules_json_includes_version_metadata() {
196-
let formatter = JsonOutputFormatter::default();
197-
let output = formatter.all_rules(rustc_hash::FxHashSet::default()).unwrap();
198-
let rules: Value = serde_json::from_str(&output).unwrap();
199-
let rules = rules.as_array().unwrap();
200-
201-
assert!(!rules.is_empty());
202-
assert!(rules.iter().all(|rule| {
203-
rule.get("version").and_then(Value::as_str).is_some_and(|version| !version.is_empty())
204-
}));
205-
}
206194
}

crates/oxc_linter/src/generated/rules_enum.rs

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/oxc_linter/src/table.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pub struct RuleTableRow {
2222
pub name: &'static str,
2323
pub plugin: String,
2424
pub category: RuleCategory,
25+
#[cfg(feature = "ruledocs")]
2526
pub version: &'static str,
2627
#[cfg(feature = "ruledocs")]
2728
pub documentation: Option<&'static str>,
@@ -60,6 +61,7 @@ impl RuleTable {
6061
let name = rule.name();
6162
RuleTableRow {
6263
name,
64+
#[cfg(feature = "ruledocs")]
6365
version: rule.version(),
6466
#[cfg(feature = "ruledocs")]
6567
documentation: rule.documentation(),

tasks/linter_codegen/src/rules_enum.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ fn generate_rule_enum_impl(rule_entries: &[RuleEntry<'_>]) -> TokenStream {
379379
}
380380

381381
/// The version of oxlint in which this rule was first available.
382+
#[cfg(feature = "ruledocs")]
382383
pub fn version(&self) -> &'static str {
383384
match self {
384385
#(#version_arms),*

tasks/website_linter/src/rules/doc_page.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ const source = `{}`;{}
122122
// how-to-use and rule references components.
123123
writeln!(
124124
self.page,
125-
"\n## How to use\n<RuleHowToUse />\n\n## References\n<RuleReferences />"
125+
"\n## How to use\n<RuleHowToUse />\n\n## Version\nThis rule was added in v{version}.\n\n## References\n<RuleReferences />"
126126
)?;
127127

128128
Ok(self.page.take())

tasks/website_linter/src/rules/mod.rs

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -173,22 +173,4 @@ mod tests {
173173
insta::assert_snapshot!(snapshot);
174174
});
175175
}
176-
177-
#[test]
178-
fn test_docs_rule_pages_include_version_frontmatter() {
179-
let mut generator = SchemaGenerator::new(SchemaSettings::default());
180-
let table = RuleTable::new(Some(&mut generator));
181-
let (_, docs, rule) = render_rule_doc_pages(generator, &table)
182-
.find(|(_, _, rule)| rule.plugin == "eslint" && rule.name == "no-unused-vars")
183-
.unwrap();
184-
185-
assert!(
186-
docs.contains("version: \""),
187-
"expected generated docs for {}/{} to include version frontmatter:\n{}",
188-
rule.plugin,
189-
rule.name,
190-
docs
191-
);
192-
assert!(docs.contains(&format!("version: \"{}\"", rule.version)));
193-
}
194176
}

tasks/website_linter/src/rules/snapshots/docs_rule_pages.snap

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
---
22
source: tasks/website_linter/src/rules/mod.rs
3-
assertion_line: 173
43
expression: snapshot
54
---
65
--- eslint/no-unused-vars.md ---
@@ -614,6 +613,9 @@ console.log(b);
614613
## How to use
615614
<RuleHowToUse />
616615

616+
## Version
617+
This rule was added in v0.7.0.
618+
617619
## References
618620
<RuleReferences />
619621

@@ -707,6 +709,9 @@ Whether to allow computed references to an imported namespace.
707709
## How to use
708710
<RuleHowToUse />
709711

712+
## Version
713+
This rule was added in v0.2.11.
714+
710715
## References
711716
<RuleReferences />
712717

@@ -791,6 +796,9 @@ NOTE: The default value is `["expect"]` for Jest and
791796
## How to use
792797
<RuleHowToUse />
793798

799+
## Version
800+
This rule was added in v0.0.12.
801+
794802
## References
795803
<RuleReferences />
796804

@@ -871,6 +879,9 @@ export default MyDocument
871879
## How to use
872880
<RuleHowToUse />
873881

882+
## Version
883+
This rule was added in v0.3.3.
884+
874885
## References
875886
<RuleReferences />
876887

@@ -965,6 +976,9 @@ Boolean as to whether callbacks in timeout functions like `setTimeout` will err.
965976
## How to use
966977
<RuleHowToUse />
967978

979+
## Version
980+
This rule was added in v0.10.0.
981+
968982
## References
969983
<RuleReferences />
970984

@@ -1050,6 +1064,9 @@ Makes this rule more strict by disallowing calls to `this.setState`` even within
10501064
## How to use
10511065
<RuleHowToUse />
10521066

1067+
## Version
1068+
This rule was added in v1.37.0.
1069+
10531070
## References
10541071
<RuleReferences />
10551072

@@ -1329,6 +1346,9 @@ Ignore Promises that are void expressions.
13291346
## How to use
13301347
<RuleHowToUse />
13311348

1349+
## Version
1350+
This rule was added in v1.11.0.
1351+
13321352
## References
13331353
<RuleReferences />
13341354

@@ -1394,6 +1414,9 @@ export default {
13941414
## How to use
13951415
<RuleHowToUse />
13961416

1417+
## Version
1418+
This rule was added in v1.39.0.
1419+
13971420
## References
13981421
<RuleReferences />
13991422

@@ -1446,6 +1469,9 @@ const match = users.find(fn);
14461469
## How to use
14471470
<RuleHowToUse />
14481471

1472+
## Version
1473+
This rule was added in v0.16.12.
1474+
14491475
## References
14501476
<RuleReferences />
14511477

@@ -1525,6 +1551,9 @@ before the rule is triggered.
15251551
## How to use
15261552
<RuleHowToUse />
15271553

1554+
## Version
1555+
This rule was added in v0.3.0.
1556+
15281557
## References
15291558
<RuleReferences />
15301559

@@ -1641,6 +1670,9 @@ The name of the prop to forbid.
16411670
## How to use
16421671
<RuleHowToUse />
16431672

1673+
## Version
1674+
This rule was added in v1.24.0.
1675+
16441676
## References
16451677
<RuleReferences />
16461678

@@ -1735,6 +1767,9 @@ Whether to ignore rest parameter arrays.
17351767
## How to use
17361768
<RuleHowToUse />
17371769

1770+
## Version
1771+
This rule was added in v0.0.13.
1772+
17381773
## References
17391774
<RuleReferences />
17401775

@@ -1843,6 +1878,9 @@ Whether to require a `@returns` tag for async functions.
18431878
## How to use
18441879
<RuleHowToUse />
18451880

1881+
## Version
1882+
This rule was added in v0.4.0.
1883+
18461884
## References
18471885
<RuleReferences />
18481886

@@ -1928,6 +1966,9 @@ function useCustomHook() {
19281966
## How to use
19291967
<RuleHowToUse />
19301968

1969+
## Version
1970+
This rule was added in v0.3.3.
1971+
19311972
## References
19321973
<RuleReferences />
19331974

@@ -2035,5 +2076,8 @@ return "oxc";
20352076
## How to use
20362077
<RuleHowToUse />
20372078

2079+
## Version
2080+
This rule was added in v1.47.0.
2081+
20382082
## References
20392083
<RuleReferences />

0 commit comments

Comments
 (0)