|
9 | 9 | // Requirements
|
10 | 10 | //------------------------------------------------------------------------------
|
11 | 11 |
|
12 |
| -var lodash = require("lodash"), |
13 |
| - Traverser = require("./util/traverser"), |
| 12 | +var assert = require("assert"), |
| 13 | + EventEmitter = require("events").EventEmitter, |
14 | 14 | escope = require("escope"),
|
15 |
| - Environments = require("./config/environments"), |
| 15 | + levn = require("levn"), |
| 16 | + lodash = require("lodash"), |
16 | 17 | blankScriptAST = require("../conf/blank-script.json"),
|
17 |
| - rules = require("./rules"), |
18 |
| - RuleContext = require("./rule-context"), |
19 |
| - timing = require("./timing"), |
20 |
| - SourceCode = require("./util/source-code"), |
21 |
| - NodeEventGenerator = require("./util/node-event-generator"), |
22 |
| - CommentEventGenerator = require("./util/comment-event-generator"), |
23 |
| - EventEmitter = require("events").EventEmitter, |
| 18 | + DEFAULT_PARSER = require("../conf/eslint.json").parser, |
| 19 | + replacements = require("../conf/replacements.json"), |
| 20 | + CodePathAnalyzer = require("./code-path-analysis/code-path-analyzer"), |
24 | 21 | ConfigOps = require("./config/config-ops"),
|
25 | 22 | validator = require("./config/config-validator"),
|
26 |
| - replacements = require("../conf/replacements.json"), |
27 |
| - assert = require("assert"), |
28 |
| - CodePathAnalyzer = require("./code-path-analysis/code-path-analyzer"); |
29 |
| - |
30 |
| -var DEFAULT_PARSER = require("../conf/eslint.json").parser; |
| 23 | + Environments = require("./config/environments"), |
| 24 | + CommentEventGenerator = require("./util/comment-event-generator"), |
| 25 | + NodeEventGenerator = require("./util/node-event-generator"), |
| 26 | + SourceCode = require("./util/source-code"), |
| 27 | + Traverser = require("./util/traverser"), |
| 28 | + RuleContext = require("./rule-context"), |
| 29 | + rules = require("./rules"), |
| 30 | + timing = require("./timing"); |
31 | 31 |
|
32 | 32 | //------------------------------------------------------------------------------
|
33 | 33 | // Helpers
|
@@ -80,6 +80,25 @@ function parseBooleanConfig(string, comment) {
|
80 | 80 | function parseJsonConfig(string, location, messages) {
|
81 | 81 | var items = {};
|
82 | 82 |
|
| 83 | + // Parses a JSON-like comment by the same way as parsing CLI option. |
| 84 | + try { |
| 85 | + items = levn.parse("Object", string) || {}; |
| 86 | + |
| 87 | + // Some tests say that it should ignore invalid comments such as `/*eslint no-alert:abc*/`. |
| 88 | + // Also, commaless notations have invalid severity: |
| 89 | + // "no-alert: 2 no-console: 2" --> {"no-alert": "2 no-console: 2"} |
| 90 | + // Should ignore that case as well. |
| 91 | + if (ConfigOps.isEverySeverityValid(items)) { |
| 92 | + return items; |
| 93 | + } |
| 94 | + } catch (ex) { |
| 95 | + |
| 96 | + // ignore to parse the string by a fallback. |
| 97 | + } |
| 98 | + |
| 99 | + // Optionator cannot parse commaless notations. |
| 100 | + // But we are supporting that. So this is a fallback for that. |
| 101 | + items = {}; |
83 | 102 | string = string.replace(/([a-zA-Z0-9\-\/]+):/g, "\"$1\":").replace(/(\]|[0-9])\s+(?=")/, "$1,");
|
84 | 103 | try {
|
85 | 104 | items = JSON.parse("{" + string + "}");
|
|
0 commit comments