Skip to content

Commit 9bae900

Browse files
NEW: @W-16371174@: Make all configuration settings case insensitive
1 parent a25ff11 commit 9bae900

File tree

30 files changed

+344
-170
lines changed

30 files changed

+344
-170
lines changed

packages/T-E-M-P-L-A-T-E/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@salesforce/t-e-m-p-l-a-t-e",
33
"description": "T-E-M-P-L-A-T-E",
4-
"version": "0.15.0",
4+
"version": "0.16.0-SNAPSHOT",
55
"author": "The Salesforce Code Analyzer Team",
66
"license": "BSD-3-Clause",
77
"homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview",
@@ -14,7 +14,7 @@
1414
"types": "dist/index.d.ts",
1515
"dependencies": {
1616
"@types/node": "^20.0.0",
17-
"@salesforce/code-analyzer-engine-api": "0.15.0"
17+
"@salesforce/code-analyzer-engine-api": "0.16.0-SNAPSHOT"
1818
},
1919
"devDependencies": {
2020
"@eslint/js": "^8.57.1",

packages/code-analyzer-core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@salesforce/code-analyzer-core",
33
"description": "Core Package for the Salesforce Code Analyzer",
4-
"version": "0.18.1-SNAPSHOT",
4+
"version": "0.19.0-SNAPSHOT",
55
"author": "The Salesforce Code Analyzer Team",
66
"license": "BSD-3-Clause",
77
"homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview",
@@ -13,7 +13,7 @@
1313
"main": "dist/index.js",
1414
"types": "dist/index.d.ts",
1515
"dependencies": {
16-
"@salesforce/code-analyzer-engine-api": "0.15.0",
16+
"@salesforce/code-analyzer-engine-api": "0.16.0-SNAPSHOT",
1717
"@types/js-yaml": "^4.0.9",
1818
"@types/node": "^20.0.0",
1919
"@types/sarif": "^2.1.7",

packages/code-analyzer-core/src/code-analyzer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ export class CodeAnalyzer {
269269

270270
const engineConfigValueExtractor: engApi.ConfigValueExtractor = new engApi.ConfigValueExtractor(
271271
engineOverrides as engApi.ConfigObject, `${FIELDS.ENGINES}.${engineName}`, this.config.getConfigRoot());
272+
engineConfigValueExtractor._addHiddenKeys([FIELDS.DISABLE_ENGINE]);
272273

273274
try {
274275
const engineConfig: engApi.ConfigObject = await enginePluginV1.createEngineConfig(engineName, engineConfigValueExtractor);

packages/code-analyzer-core/src/config.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {SeverityLevel} from "./rules";
1010
export const FIELDS = {
1111
CONFIG_ROOT: 'config_root',
1212
LOG_FOLDER: 'log_folder',
13-
CUSTOM_ENGINE_PLUGIN_MODULES: 'custom_engine_plugin_modules',
13+
CUSTOM_ENGINE_PLUGIN_MODULES: 'custom_engine_plugin_modules', // Hidden
1414
RULES: 'rules',
1515
ENGINES: 'engines',
1616
SEVERITY: 'severity',
@@ -98,6 +98,8 @@ export class CodeAnalyzerConfig {
9898
configRoot = !rawConfig.config_root ? (configRoot ?? process.cwd()) :
9999
validateAbsoluteFolder(rawConfig.config_root, FIELDS.CONFIG_ROOT);
100100
const configExtractor: engApi.ConfigValueExtractor = new engApi.ConfigValueExtractor(rawConfig, '', configRoot);
101+
configExtractor._addHiddenKeys([FIELDS.CUSTOM_ENGINE_PLUGIN_MODULES]);
102+
configExtractor.validateOnlyContainsKeys([FIELDS.CONFIG_ROOT, FIELDS.LOG_FOLDER ,FIELDS.RULES, FIELDS.ENGINES]);
101103
const config: TopLevelConfig = {
102104
config_root: configRoot,
103105
log_folder: configExtractor.extractFolder(FIELDS.LOG_FOLDER, DEFAULT_CONFIG.log_folder)!,
@@ -159,15 +161,15 @@ export class CodeAnalyzerConfig {
159161
}
160162

161163
public getRuleOverridesFor(engineName: string): RuleOverrides {
162-
return this.config.rules[engineName] || {};
164+
return engApi.getValueUsingCaseInsensitiveKey(this.config.rules, engineName) as RuleOverrides || {};
163165
}
164166

165167
public getRuleOverrideFor(engineName: string, ruleName: string): RuleOverride {
166-
return this.getRuleOverridesFor(engineName)[ruleName] || {};
168+
return engApi.getValueUsingCaseInsensitiveKey(this.getRuleOverridesFor(engineName), ruleName) as RuleOverride || {};
167169
}
168170

169171
public getEngineOverridesFor(engineName: string): EngineOverrides {
170-
return this.config.engines[engineName] || {};
172+
return engApi.getValueUsingCaseInsensitiveKey(this.config.engines, engineName) as EngineOverrides|| {};
171173
}
172174
}
173175

@@ -189,6 +191,7 @@ function extractRuleOverridesFrom(engineRuleOverridesExtractor: engApi.ConfigVal
189191
}
190192

191193
function extractRuleOverrideFrom(ruleOverrideExtractor: engApi.ConfigValueExtractor): RuleOverride {
194+
ruleOverrideExtractor.validateOnlyContainsKeys([FIELDS.SEVERITY, FIELDS.TAGS]);
192195
const engSeverity: engApi.SeverityLevel | undefined = ruleOverrideExtractor.extractSeverityLevel(FIELDS.SEVERITY);
193196
return {
194197
tags: ruleOverrideExtractor.extractArray(FIELDS.TAGS, engApi.ValueValidator.validateString),

packages/code-analyzer-core/test/config.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ describe("Tests for creating and accessing configuration values", () => {
5757
tags: ['Security', "SomeNewTag"]
5858
}
5959
});
60+
expect(conf.getRuleOverrideFor('STUBENGINE1','STUB1RULED')).toEqual(conf.getRuleOverrideFor('stubEngine1','stub1RuleD')); // Sanity test for case insensitivity
6061
expect(conf.getEngineOverridesFor('stubEngine1')).toEqual({});
6162
expect(conf.getEngineOverridesFor('stubEngine2')).toEqual({});
6263
});
@@ -85,13 +86,15 @@ describe("Tests for creating and accessing configuration values", () => {
8586
severity: SeverityLevel.Moderate
8687
}
8788
});
89+
expect(conf.getRuleOverridesFor('STUbengine2')).toEqual(conf.getRuleOverridesFor('stubEngine2')); // Also test case insensitivity
8890
expect(conf.getEngineOverridesFor('stubEngine1')).toEqual({
8991
miscSetting1: true,
9092
miscSetting2: {
9193
miscSetting2A: 3,
9294
miscSetting2B: ["hello", "world"]
9395
}
9496
});
97+
expect(conf.getEngineOverridesFor('stubENGINE1')).toEqual(conf.getEngineOverridesFor('stubEngine1')); // Also test case insensitivity
9598
expect(conf.getEngineOverridesFor('stubEngine2')).toEqual({});
9699
});
97100

@@ -165,6 +168,12 @@ describe("Tests for creating and accessing configuration values", () => {
165168
getMessage('ConfigContentNotAnObject','array'));
166169
});
167170

171+
it("When top level config has an unknown key, then we error", () => {
172+
expect(() => CodeAnalyzerConfig.fromObject({doesNotExist: 3})).toThrow(
173+
getMessageFromCatalog(SHARED_MESSAGE_CATALOG,'ConfigObjectContainsInvalidKey','<TopLevel>', 'doesNotExist',
174+
'["config_root","log_folder","rules","engines"]'));
175+
});
176+
168177
it("When engines value is not an object then we throw an error", () => {
169178
expect(() => CodeAnalyzerConfig.fromObject({engines: ['oops']})).toThrow(
170179
getMessageFromCatalog(SHARED_MESSAGE_CATALOG,'ConfigValueMustBeOfType','engines', 'object', 'array'));
@@ -190,6 +199,12 @@ describe("Tests for creating and accessing configuration values", () => {
190199
getMessageFromCatalog(SHARED_MESSAGE_CATALOG,'ConfigValueMustBeOfType','rules.someEngine.someRule', 'object', 'array'));
191200
});
192201

202+
it("When rules.someEngine.someRule contains an unknown key then we throw an error", () => {
203+
expect(() => CodeAnalyzerConfig.fromObject({rules: {someEngine: {someRule: {oops: 3, tags: []}}}})).toThrow(
204+
getMessageFromCatalog(SHARED_MESSAGE_CATALOG,'ConfigObjectContainsInvalidKey','rules.someEngine.someRule', 'oops',
205+
'["severity","tags"]'));
206+
});
207+
193208
it("When the severity of a rule not a valid value then we throw an error", () => {
194209
expect(() => CodeAnalyzerConfig.fromObject({rules: {someEngine: {
195210
goodSevRule1: {severity: 3},

packages/code-analyzer-engine-api/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@salesforce/code-analyzer-engine-api",
33
"description": "Engine API Package for the Salesforce Code Analyzer",
4-
"version": "0.15.0",
4+
"version": "0.16.0-SNAPSHOT",
55
"author": "The Salesforce Code Analyzer Team",
66
"license": "BSD-3-Clause",
77
"homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview",

0 commit comments

Comments
 (0)