Skip to content

Commit

Permalink
initialize linter lazily
Browse files Browse the repository at this point in the history
  • Loading branch information
saberduck committed Jul 24, 2020
1 parent ce68eb9 commit cf9a7ca
Show file tree
Hide file tree
Showing 4 changed files with 1,467 additions and 27 deletions.
1 change: 1 addition & 0 deletions eslint-bridge/package.json
Expand Up @@ -24,6 +24,7 @@
"node": ">=6"
},
"devDependencies": {
"0x": "^4.9.1",
"@types/eslint": "7.2.0",
"@types/eslint-scope": "3.7.0",
"@types/esprima": "4.0.2",
Expand Down
19 changes: 13 additions & 6 deletions eslint-bridge/src/linter.ts
Expand Up @@ -48,6 +48,9 @@ const linter = new Linter();
linter.defineRules(sonarjsRules);
linter.defineRules(internalRules);

let linterConfig: Linter.Config;
let rules: Map<string, ESLintRule.RuleModule>;

const NO_UNUSED_EXPRESSIONS = 'no-unused-expressions';

// core implementation of this rule raises FPs on chai framework
Expand Down Expand Up @@ -80,12 +83,16 @@ export function analyze(
inputRules: Rule[],
...additionalRules: AdditionalRule[]
) {
additionalRules.forEach(additionalRule =>
linter.defineRule(additionalRule.ruleId, additionalRule.ruleModule),
);
if (!linterConfig) {
additionalRules.forEach(additionalRule =>
linter.defineRule(additionalRule.ruleId, additionalRule.ruleModule),
);
rules = linter.getRules();
linterConfig = createLinterConfig(inputRules, additionalRules);
}

const issues = linter
.verify(sourceCode, createLinterConfig(inputRules, additionalRules), {
.verify(sourceCode, linterConfig, {
filename: filePath,
allowInlineConfig: false,
})
Expand All @@ -94,7 +101,7 @@ export function analyze(
if (!issue) {
return null;
}
return decodeSonarRuntimeIssue(linter.getRules().get(issue.ruleId), issue);
return decodeSonarRuntimeIssue(rules.get(issue.ruleId), issue);
})
.filter((issue): issue is Issue => issue !== null)
.map(normalizeIssueLocation);
Expand Down Expand Up @@ -149,7 +156,7 @@ function createLinterConfig(
parserOptions: { sourceType: 'module', ecmaVersion: 2018 },
};
inputRules.forEach(inputRule => {
const ruleModule = linter.getRules().get(inputRule.key);
const ruleModule = rules.get(inputRule.key);
ruleConfig.rules![inputRule.key] = ['error', ...getRuleConfig(ruleModule, inputRule)];
});

Expand Down

0 comments on commit cf9a7ca

Please sign in to comment.