From 130418e41f1726c498f17f3efb24cbaf1de41262 Mon Sep 17 00:00:00 2001 From: hongjr03 Date: Sun, 24 May 2026 12:08:54 +0800 Subject: [PATCH] fix(diagnostics): hide inactive force rule option --- crates/base-db/src/diagnostics_config.rs | 2 -- editors/vscode/package.json | 5 ----- editors/vscode/package.nls.json | 1 - editors/vscode/package.nls.zh-cn.json | 1 - editors/vscode/src/diagnosticRules.ts | 1 - editors/vscode/test/configuration.test.ts | 18 ++++++++++++++++++ editors/vscode/test/diagnosticRules.test.ts | 4 ++-- src/config/user_config.rs | 10 +++++++--- 8 files changed, 27 insertions(+), 15 deletions(-) diff --git a/crates/base-db/src/diagnostics_config.rs b/crates/base-db/src/diagnostics_config.rs index e056c2c9..053df88e 100644 --- a/crates/base-db/src/diagnostics_config.rs +++ b/crates/base-db/src/diagnostics_config.rs @@ -28,7 +28,6 @@ pub struct SlangDiagnosticsConfig { pub struct DiagnosticRule { pub selector: DiagnosticSelector, pub severity: DiagnosticRuleSeverity, - pub force: bool, } #[derive(Debug, Clone, PartialEq, Eq)] @@ -126,7 +125,6 @@ mod tests { rules: vec![DiagnosticRule { selector: DiagnosticSelector::Source(DiagnosticSource::Parse), severity: DiagnosticRuleSeverity::Ignore, - force: false, }], }, ..DiagnosticsConfig::default() diff --git a/editors/vscode/package.json b/editors/vscode/package.json index ac5ba150..b6e88bc0 100644 --- a/editors/vscode/package.json +++ b/editors/vscode/package.json @@ -321,11 +321,6 @@ "fatal" ], "description": "%configuration.diagnostics.slang.rules.severity.description%" - }, - "force": { - "type": "boolean", - "default": false, - "description": "%configuration.diagnostics.slang.rules.force.description%" } }, "additionalProperties": false diff --git a/editors/vscode/package.nls.json b/editors/vscode/package.nls.json index 766c24fe..ee37ac20 100644 --- a/editors/vscode/package.nls.json +++ b/editors/vscode/package.nls.json @@ -37,7 +37,6 @@ "configuration.diagnostics.slang.rules.markdownDescription": "Rules that filter or override diagnostic severities. Supported selectors: `code::`, `option:`, `group:`, `source:parse`, `source:semantic`.", "configuration.diagnostics.slang.rules.selector.markdownDescription": "Diagnostic selector. Examples: `code:1:2`, `option:unconnected-port`, `group:default`, `source:semantic`.", "configuration.diagnostics.slang.rules.severity.description": "Severity to apply when this rule matches. Use ignore to hide the diagnostic.", - "configuration.diagnostics.slang.rules.force.description": "Reserved for future support for overriding in-source diagnostic pragmas.", "configuration.signature.help.params.only.description": "Show signature help for parameters only.", "command.showOutput.title": "Vizsla: Show Language Server Output", "command.restartServer.title": "Vizsla: Restart Language Server", diff --git a/editors/vscode/package.nls.zh-cn.json b/editors/vscode/package.nls.zh-cn.json index a27b40cf..8907f063 100644 --- a/editors/vscode/package.nls.zh-cn.json +++ b/editors/vscode/package.nls.zh-cn.json @@ -37,7 +37,6 @@ "configuration.diagnostics.slang.rules.markdownDescription": "过滤或覆盖诊断严重程度的规则。支持的选择器:`code::`、`option:`、`group:`、`source:parse`、`source:semantic`。", "configuration.diagnostics.slang.rules.selector.markdownDescription": "诊断选择器。示例:`code:1:2`、`option:unconnected-port`、`group:default`、`source:semantic`。", "configuration.diagnostics.slang.rules.severity.description": "此规则匹配时应用的严重程度。使用 ignore 可隐藏该诊断。", - "configuration.diagnostics.slang.rules.force.description": "预留给未来覆盖源代码内诊断 pragma 的支持。", "configuration.signature.help.params.only.description": "仅显示参数的签名帮助。", "command.showOutput.title": "Vizsla:显示语言服务器输出", "command.restartServer.title": "Vizsla:重启语言服务器", diff --git a/editors/vscode/src/diagnosticRules.ts b/editors/vscode/src/diagnosticRules.ts index 176dad47..e5b92a2a 100644 --- a/editors/vscode/src/diagnosticRules.ts +++ b/editors/vscode/src/diagnosticRules.ts @@ -3,7 +3,6 @@ export type DiagnosticRuleSeverity = 'ignore' | 'info' | 'warning' | 'error' | ' export interface DiagnosticRule { selector: string; severity: DiagnosticRuleSeverity; - force?: boolean; } export type DiagnosticRuleTarget = 'user' | 'workspace'; diff --git a/editors/vscode/test/configuration.test.ts b/editors/vscode/test/configuration.test.ts index 67875635..6bca74b6 100644 --- a/editors/vscode/test/configuration.test.ts +++ b/editors/vscode/test/configuration.test.ts @@ -14,6 +14,8 @@ type PackageJson = { }; }; +type JsonObject = Record; + function readJson(fileName: string): T { return JSON.parse(fs.readFileSync(path.join(__dirname, '..', fileName), 'utf8')) as T; } @@ -28,6 +30,13 @@ function readConfigurationProperties(): Record { return packageJson.contributes?.configuration?.properties ?? {}; } +function asObject(value: unknown): JsonObject { + assert.equal(typeof value, 'object'); + assert.notEqual(value, null); + + return value as JsonObject; +} + function collectNlsPlaceholders(value: unknown, keys = new Set()): Set { if (typeof value === 'string') { const match = /^%([^%]+)%$/.exec(value); @@ -121,6 +130,15 @@ test('does not expose the old vizslaLsp settings namespace', () => { assert.deepEqual(oldSettings, []); }); +test('does not expose inactive diagnostic rule options', () => { + const properties = readConfigurationProperties(); + const rules = asObject(properties['vizsla.diagnostics.slang.rules']); + const items = asObject(rules.items); + const itemProperties = asObject(items.properties); + + assert.equal('force' in itemProperties, false); +}); + test('localizes package contribution strings for English and Simplified Chinese', () => { const packageJson = readPackageJson(); const placeholderKeys = [...collectNlsPlaceholders(packageJson)].sort(); diff --git a/editors/vscode/test/diagnosticRules.test.ts b/editors/vscode/test/diagnosticRules.test.ts index dde3c0ad..f77ed58f 100644 --- a/editors/vscode/test/diagnosticRules.test.ts +++ b/editors/vscode/test/diagnosticRules.test.ts @@ -31,11 +31,11 @@ test('renders concise diagnostic selector labels', () => { test('upserts diagnostic severity rules by selector', () => { assert.deepEqual( upsertDiagnosticRule( - [{ selector: 'code:6:129', severity: 'error', force: true }], + [{ selector: 'code:6:129', severity: 'error' }], 'code:6:129', 'warning', ), - [{ selector: 'code:6:129', severity: 'warning', force: true }], + [{ selector: 'code:6:129', severity: 'warning' }], ); assert.deepEqual(upsertDiagnosticRule([], 'code:2:260', 'ignore'), [ diff --git a/src/config/user_config.rs b/src/config/user_config.rs index 419adfe2..f8c1c8d0 100644 --- a/src/config/user_config.rs +++ b/src/config/user_config.rs @@ -85,8 +85,6 @@ pub(crate) struct SlangDiagnosticsUserConfig { pub(crate) struct DiagnosticRuleUserConfig { pub(crate) selector: String, pub(crate) severity: DiagnosticRuleSeverityUserConfig, - #[serde(default)] - pub(crate) force: bool, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)] @@ -248,7 +246,6 @@ impl DiagnosticRuleUserConfig { Some(DiagnosticRule { selector: parse_selector(&self.selector)?, severity: self.severity.into(), - force: self.force, }) } } @@ -380,6 +377,13 @@ fn parses_nested_diagnostics_config() { assert!(!config.semantic.enabled); assert_eq!(config.slang.warnings, ["default", "no-unused"]); assert_eq!(config.slang.rules.len(), 2); + assert_eq!( + config.slang.rules[1], + DiagnosticRule { + selector: DiagnosticSelector::Code { subsystem: 1, code: 2 }, + severity: DiagnosticRuleSeverity::Error, + } + ); } #[test]