Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/code-analyzer-eslint-engine/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@salesforce/code-analyzer-eslint-engine",
"description": "Plugin package that adds 'eslint' as an engine into Salesforce Code Analyzer",
"version": "0.39.0",
"version": "0.40.0-SNAPSHOT",
"author": "The Salesforce Code Analyzer Team",
"license": "BSD-3-Clause",
"homepage": "https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview",
Expand Down
20 changes: 9 additions & 11 deletions packages/code-analyzer-eslint-engine/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export type ESLintEngineConfig = {
disable_typescript_base_config: boolean

// If true then the base configuration that supplies the React/JSX rules will not be applied.
// Default: true (React support is currently gated; will change to false when released)
// Default: false
disable_react_base_config: boolean

// Extensions of the files in your workspace that will be used to discover rules.
Expand Down Expand Up @@ -70,7 +70,7 @@ export const DEFAULT_CONFIG: ESLintEngineConfig = {
disable_lwc_base_config: false,
disable_slds_base_config: false,
disable_typescript_base_config: false,
disable_react_base_config: true, // Gated for now - will change to false when released
disable_react_base_config: false,
file_extensions: {
javascript: ['.js', '.cjs', '.mjs', '.jsx'],
typescript: ['.ts', '.tsx'],
Expand Down Expand Up @@ -119,8 +119,11 @@ export const ESLINT_ENGINE_CONFIG_DESCRIPTION: ConfigDescription = {
valueType: "boolean",
defaultValue: DEFAULT_CONFIG.disable_typescript_base_config
},
// Note: disable_react_base_config is gated and not user-configurable yet
// TODO: Add to fieldDescriptions when React support is released
disable_react_base_config: {
descriptionText: getMessage('ConfigFieldDescription_disable_react_base_config'),
valueType: "boolean",
defaultValue: DEFAULT_CONFIG.disable_react_base_config
},
file_extensions: {
descriptionText: getMessage('ConfigFieldDescription_file_extensions'),
valueType: "object",
Expand All @@ -143,12 +146,9 @@ export const LEGACY_ESLINT_IGNORE_FILE: string = '.eslintignore';


export function validateAndNormalizeConfig(configValueExtractor: ConfigValueExtractor): ESLintEngineConfig {
// disable_react_base_config bypasses validation - React support is gated but we need it for internal testing
// TODO: Move 'disable_react_base_config' to validateContainsOnlySpecifiedKeys when React support is released
configValueExtractor.addKeysThatBypassValidation(['disable_react_base_config']);
configValueExtractor.validateContainsOnlySpecifiedKeys(['eslint_config_file', 'eslint_ignore_file',
'auto_discover_eslint_config', 'disable_javascript_base_config', 'disable_lwc_base_config',
'disable_slds_base_config', 'disable_typescript_base_config', 'file_extensions']);
'disable_slds_base_config', 'disable_typescript_base_config', 'disable_react_base_config', 'file_extensions']);

const eslintConfigValueExtractor: ESLintEngineConfigValueExtractor = new ESLintEngineConfigValueExtractor(configValueExtractor);
return {
Expand All @@ -160,9 +160,7 @@ export function validateAndNormalizeConfig(configValueExtractor: ConfigValueExtr
disable_lwc_base_config: eslintConfigValueExtractor.extractBooleanValue('disable_lwc_base_config'),
disable_slds_base_config: eslintConfigValueExtractor.extractBooleanValue('disable_slds_base_config'),
disable_typescript_base_config: eslintConfigValueExtractor.extractBooleanValue('disable_typescript_base_config'),
// React support is gated - always force to true regardless of customer config
// TODO: Change to eslintConfigValueExtractor.extractBooleanValue('disable_react_base_config') when released
disable_react_base_config: true,
disable_react_base_config: eslintConfigValueExtractor.extractBooleanValue('disable_react_base_config'),
file_extensions: eslintConfigValueExtractor.extractFileExtensionsValue(),
};
}
Expand Down
4 changes: 1 addition & 3 deletions packages/code-analyzer-eslint-engine/test/engine.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@ jest.setTimeout(60_000);

const DEFAULT_CONFIG_FOR_TESTING: ESLintEngineConfig = {
...DEFAULT_CONFIG,
config_root: __dirname,
// React is gated in production (default: true). For testing, enable it (eventual default: false)
disable_react_base_config: false
config_root: __dirname
}

const testDataFolder: string = path.join(__dirname, 'test-data');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@ const RUN_GENERATOR = process.env.GENERATE_REACT_A11Y === 'true';
it('writes test/test-data/rules_ReactA11yConfig.goldfile.json', async () => {
const config: ESLintEngineConfig = {
...DEFAULT_CONFIG,
config_root: __dirname,
// Ensure React stack is enabled during generation
disable_react_base_config: false
config_root: __dirname
};
const enginePlugin = new ESLintEnginePlugin();
const engine: Engine = await enginePlugin.createEngine('eslint', config);
Expand Down
4 changes: 1 addition & 3 deletions packages/code-analyzer-eslint-engine/test/misc.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import {ESLintWorkspace} from "../src/workspace";

const DEFAULT_CONFIG_FOR_TESTING: ESLintEngineConfig = {
...DEFAULT_CONFIG,
config_root: __dirname,
// React is gated in production (default: true). For testing, enable it (eventual default: false)
disable_react_base_config: false
config_root: __dirname
}
const testDataFolder: string = path.join(__dirname, 'test-data');

Expand Down
3 changes: 1 addition & 2 deletions packages/code-analyzer-eslint-engine/test/plugin.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,9 @@ describe('Tests for the ESLintEnginePlugin', () => {
it('When createEngineConfig is called with an object containing an invalid key, then we error', async () => {
const userProvidedOverrides: ConfigObject = {dummy: 3};
await expect(callCreateEngineConfig(plugin, userProvidedOverrides)).rejects.toThrow(
// Note: disable_react_base_config is intentionally excluded - React support is gated
getMessageFromCatalog(SHARED_MESSAGE_CATALOG, 'ConfigObjectContainsInvalidKey', 'engines.eslint', 'dummy',
'["auto_discover_eslint_config","disable_javascript_base_config","disable_lwc_base_config",' +
'"disable_slds_base_config","disable_typescript_base_config",' +
'"disable_react_base_config","disable_slds_base_config","disable_typescript_base_config",' +
'"eslint_config_file","eslint_ignore_file","file_extensions"]'));
});

Expand Down
3 changes: 0 additions & 3 deletions packages/code-analyzer-eslint-engine/test/react-a11y.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ describe('jsx-a11y plugin integration', () => {
it('exposes core jsx-a11y rules with React tagging', async () => {
const config: ESLintEngineConfig = {
...DEFAULT_CONFIG,
// Enable React base config for tests
disable_react_base_config: false,
config_root: __dirname
};
const enginePlugin: ESLintEnginePlugin = new ESLintEnginePlugin();
Expand All @@ -34,7 +32,6 @@ describe('jsx-a11y plugin integration', () => {
it('includes all A11y-tagged rules from rule-mappings', async () => {
const config: ESLintEngineConfig = {
...DEFAULT_CONFIG,
disable_react_base_config: false,
config_root: __dirname
};
const engine: Engine = await new ESLintEnginePlugin().createEngine('eslint', config);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ import { createDescribeOptions } from "./test-helpers";
describe('Tests for the rule-mappings', () => {
it('Test that the list of all bundled rules matches our RULE_MAPPINGS list', async () => {
const enginePlugin: ESLintEnginePlugin = new ESLintEnginePlugin();
// React is gated in production (default: true). For testing, enable it (eventual default: false)
const engine: Engine = await enginePlugin.createEngine('eslint', {
...DEFAULT_CONFIG,
disable_react_base_config: false
...DEFAULT_CONFIG
});
const ruleDescriptions: RuleDescription[] = await engine.describeRules(createDescribeOptions());
const actualRuleNames: Set<string> = new Set(ruleDescriptions.map(rd => rd.name));
Expand Down