eslint-interactive 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +147 -0
  3. package/bin/eslint-interactive.js +10 -0
  4. package/dist/action/apply-suggestions.d.ts +6 -0
  5. package/dist/action/apply-suggestions.d.ts.map +1 -0
  6. package/dist/action/apply-suggestions.js +28 -0
  7. package/dist/action/apply-suggestions.js.map +1 -0
  8. package/dist/action/disable-per-file.d.ts +6 -0
  9. package/dist/action/disable-per-file.d.ts.map +1 -0
  10. package/dist/action/disable-per-file.js +8 -0
  11. package/dist/action/disable-per-file.js.map +1 -0
  12. package/dist/action/disable-per-line.d.ts +6 -0
  13. package/dist/action/disable-per-line.d.ts.map +1 -0
  14. package/dist/action/disable-per-line.js +8 -0
  15. package/dist/action/disable-per-line.js.map +1 -0
  16. package/dist/action/fix.d.ts +6 -0
  17. package/dist/action/fix.d.ts.map +1 -0
  18. package/dist/action/fix.js +6 -0
  19. package/dist/action/fix.js.map +1 -0
  20. package/dist/action/index.d.ts +7 -0
  21. package/dist/action/index.d.ts.map +1 -0
  22. package/dist/action/index.js +7 -0
  23. package/dist/action/index.js.map +1 -0
  24. package/dist/action/make-fixable-and-fix.d.ts +6 -0
  25. package/dist/action/make-fixable-and-fix.d.ts.map +1 -0
  26. package/dist/action/make-fixable-and-fix.js +28 -0
  27. package/dist/action/make-fixable-and-fix.js.map +1 -0
  28. package/dist/action/print-result-details.d.ts +5 -0
  29. package/dist/action/print-result-details.d.ts.map +1 -0
  30. package/dist/action/print-result-details.js +12 -0
  31. package/dist/action/print-result-details.js.map +1 -0
  32. package/dist/cli/log.d.ts +6 -0
  33. package/dist/cli/log.d.ts.map +1 -0
  34. package/dist/cli/log.js +9 -0
  35. package/dist/cli/log.js.map +1 -0
  36. package/dist/cli/ora.d.ts +4 -0
  37. package/dist/cli/ora.d.ts.map +1 -0
  38. package/dist/cli/ora.js +23 -0
  39. package/dist/cli/ora.js.map +1 -0
  40. package/dist/cli/package.d.ts +2 -0
  41. package/dist/cli/package.d.ts.map +1 -0
  42. package/dist/cli/package.js +6 -0
  43. package/dist/cli/package.js.map +1 -0
  44. package/dist/cli/parse-argv.d.ts +4 -0
  45. package/dist/cli/parse-argv.d.ts.map +1 -0
  46. package/dist/cli/parse-argv.js +50 -0
  47. package/dist/cli/parse-argv.js.map +1 -0
  48. package/dist/cli/prompt.d.ts +53 -0
  49. package/dist/cli/prompt.d.ts.map +1 -0
  50. package/dist/cli/prompt.js +154 -0
  51. package/dist/cli/prompt.js.map +1 -0
  52. package/dist/cli/run.d.ts +8 -0
  53. package/dist/cli/run.d.ts.map +1 -0
  54. package/dist/cli/run.js +46 -0
  55. package/dist/cli/run.js.map +1 -0
  56. package/dist/core-worker.d.ts +21 -0
  57. package/dist/core-worker.d.ts.map +1 -0
  58. package/dist/core-worker.js +52 -0
  59. package/dist/core-worker.js.map +1 -0
  60. package/dist/core.d.ts +84 -0
  61. package/dist/core.d.ts.map +1 -0
  62. package/dist/core.js +196 -0
  63. package/dist/core.js.map +1 -0
  64. package/dist/formatter/colors.d.ts +4 -0
  65. package/dist/formatter/colors.d.ts.map +1 -0
  66. package/dist/formatter/colors.js +5 -0
  67. package/dist/formatter/colors.js.map +1 -0
  68. package/dist/formatter/format-by-files.d.ts +3 -0
  69. package/dist/formatter/format-by-files.d.ts.map +1 -0
  70. package/dist/formatter/format-by-files.js +41 -0
  71. package/dist/formatter/format-by-files.js.map +1 -0
  72. package/dist/formatter/format-by-rules.d.ts +3 -0
  73. package/dist/formatter/format-by-rules.d.ts.map +1 -0
  74. package/dist/formatter/format-by-rules.js +34 -0
  75. package/dist/formatter/format-by-rules.js.map +1 -0
  76. package/dist/formatter/index.d.ts +4 -0
  77. package/dist/formatter/index.d.ts.map +1 -0
  78. package/dist/formatter/index.js +7 -0
  79. package/dist/formatter/index.js.map +1 -0
  80. package/dist/formatter/take-rule-statistics.d.ts +18 -0
  81. package/dist/formatter/take-rule-statistics.d.ts.map +1 -0
  82. package/dist/formatter/take-rule-statistics.js +51 -0
  83. package/dist/formatter/take-rule-statistics.js.map +1 -0
  84. package/dist/index.d.ts +5 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +4 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/plugin/fix/apply-auto-fixes.d.ts +8 -0
  89. package/dist/plugin/fix/apply-auto-fixes.d.ts.map +1 -0
  90. package/dist/plugin/fix/apply-auto-fixes.js +8 -0
  91. package/dist/plugin/fix/apply-auto-fixes.js.map +1 -0
  92. package/dist/plugin/fix/apply-suggestions.d.ts +11 -0
  93. package/dist/plugin/fix/apply-suggestions.d.ts.map +1 -0
  94. package/dist/plugin/fix/apply-suggestions.js +25 -0
  95. package/dist/plugin/fix/apply-suggestions.js.map +1 -0
  96. package/dist/plugin/fix/disable-per-file.d.ts +10 -0
  97. package/dist/plugin/fix/disable-per-file.d.ts.map +1 -0
  98. package/dist/plugin/fix/disable-per-file.js +39 -0
  99. package/dist/plugin/fix/disable-per-file.js.map +1 -0
  100. package/dist/plugin/fix/disable-per-line.d.ts +10 -0
  101. package/dist/plugin/fix/disable-per-line.d.ts.map +1 -0
  102. package/dist/plugin/fix/disable-per-line.js +54 -0
  103. package/dist/plugin/fix/disable-per-line.js.map +1 -0
  104. package/dist/plugin/fix/index.d.ts +6 -0
  105. package/dist/plugin/fix/index.d.ts.map +1 -0
  106. package/dist/plugin/fix/index.js +6 -0
  107. package/dist/plugin/fix/index.js.map +1 -0
  108. package/dist/plugin/fix/make-fixable-and-fix.d.ts +12 -0
  109. package/dist/plugin/fix/make-fixable-and-fix.d.ts.map +1 -0
  110. package/dist/plugin/fix/make-fixable-and-fix.js +61 -0
  111. package/dist/plugin/fix/make-fixable-and-fix.js.map +1 -0
  112. package/dist/plugin/fix-rule.d.ts +10 -0
  113. package/dist/plugin/fix-rule.d.ts.map +1 -0
  114. package/dist/plugin/fix-rule.js +124 -0
  115. package/dist/plugin/fix-rule.js.map +1 -0
  116. package/dist/plugin/index.d.ts +49 -0
  117. package/dist/plugin/index.d.ts.map +1 -0
  118. package/dist/plugin/index.js +11 -0
  119. package/dist/plugin/index.js.map +1 -0
  120. package/dist/plugin/prefer-addition-shorthand-rule.d.ts +7 -0
  121. package/dist/plugin/prefer-addition-shorthand-rule.d.ts.map +1 -0
  122. package/dist/plugin/prefer-addition-shorthand-rule.js +54 -0
  123. package/dist/plugin/prefer-addition-shorthand-rule.js.map +1 -0
  124. package/dist/plugin/rule-fixer.d.ts +80 -0
  125. package/dist/plugin/rule-fixer.d.ts.map +1 -0
  126. package/dist/plugin/rule-fixer.js +118 -0
  127. package/dist/plugin/rule-fixer.js.map +1 -0
  128. package/dist/scene/check-results.d.ts +21 -0
  129. package/dist/scene/check-results.d.ts.map +1 -0
  130. package/dist/scene/check-results.js +22 -0
  131. package/dist/scene/check-results.js.map +1 -0
  132. package/dist/scene/index.d.ts +25 -0
  133. package/dist/scene/index.d.ts.map +1 -0
  134. package/dist/scene/index.js +6 -0
  135. package/dist/scene/index.js.map +1 -0
  136. package/dist/scene/lint.d.ts +8 -0
  137. package/dist/scene/lint.d.ts.map +1 -0
  138. package/dist/scene/lint.js +31 -0
  139. package/dist/scene/lint.js.map +1 -0
  140. package/dist/scene/select-action.d.ts +20 -0
  141. package/dist/scene/select-action.d.ts.map +1 -0
  142. package/dist/scene/select-action.js +46 -0
  143. package/dist/scene/select-action.js.map +1 -0
  144. package/dist/scene/select-rule-ids.d.ts +15 -0
  145. package/dist/scene/select-rule-ids.d.ts.map +1 -0
  146. package/dist/scene/select-rule-ids.js +10 -0
  147. package/dist/scene/select-rule-ids.js.map +1 -0
  148. package/dist/tsconfig.src.tsbuildinfo +1 -0
  149. package/dist/util/array.d.ts +3 -0
  150. package/dist/util/array.d.ts.map +1 -0
  151. package/dist/util/array.js +14 -0
  152. package/dist/util/array.js.map +1 -0
  153. package/dist/util/cache.d.ts +5 -0
  154. package/dist/util/cache.d.ts.map +1 -0
  155. package/dist/util/cache.js +13 -0
  156. package/dist/util/cache.js.map +1 -0
  157. package/dist/util/eslint.d.ts +68 -0
  158. package/dist/util/eslint.d.ts.map +1 -0
  159. package/dist/util/eslint.js +147 -0
  160. package/dist/util/eslint.js.map +1 -0
  161. package/dist/util/filter-script.d.ts +6 -0
  162. package/dist/util/filter-script.d.ts.map +1 -0
  163. package/dist/util/filter-script.js +39 -0
  164. package/dist/util/filter-script.js.map +1 -0
  165. package/dist/util/type-check.d.ts +3 -0
  166. package/dist/util/type-check.d.ts.map +1 -0
  167. package/dist/util/type-check.js +8 -0
  168. package/dist/util/type-check.js.map +1 -0
  169. package/package.json +93 -0
  170. package/src/action/apply-suggestions.ts +40 -0
  171. package/src/action/disable-per-file.ts +16 -0
  172. package/src/action/disable-per-line.ts +16 -0
  173. package/src/action/fix.ts +14 -0
  174. package/src/action/index.ts +6 -0
  175. package/src/action/make-fixable-and-fix.ts +40 -0
  176. package/src/action/print-result-details.ts +18 -0
  177. package/src/cli/log.ts +11 -0
  178. package/src/cli/ora.ts +25 -0
  179. package/src/cli/package.ts +9 -0
  180. package/src/cli/parse-argv.ts +52 -0
  181. package/src/cli/prompt.ts +205 -0
  182. package/src/cli/run.ts +50 -0
  183. package/src/core-worker.ts +66 -0
  184. package/src/core.ts +240 -0
  185. package/src/formatter/colors.ts +5 -0
  186. package/src/formatter/format-by-files.ts +48 -0
  187. package/src/formatter/format-by-rules.ts +37 -0
  188. package/src/formatter/index.ts +9 -0
  189. package/src/formatter/take-rule-statistics.ts +66 -0
  190. package/src/index.ts +4 -0
  191. package/src/plugin/fix/apply-auto-fixes.ts +13 -0
  192. package/src/plugin/fix/apply-suggestions.ts +44 -0
  193. package/src/plugin/fix/disable-per-file.ts +53 -0
  194. package/src/plugin/fix/disable-per-line.ts +65 -0
  195. package/src/plugin/fix/index.ts +13 -0
  196. package/src/plugin/fix/make-fixable-and-fix.ts +77 -0
  197. package/src/plugin/fix-rule.ts +142 -0
  198. package/src/plugin/index.ts +66 -0
  199. package/src/plugin/prefer-addition-shorthand-rule.ts +56 -0
  200. package/src/plugin/rule-fixer.ts +147 -0
  201. package/src/scene/check-results.ts +43 -0
  202. package/src/scene/index.ts +18 -0
  203. package/src/scene/lint.ts +41 -0
  204. package/src/scene/select-action.ts +70 -0
  205. package/src/scene/select-rule-ids.ts +24 -0
  206. package/src/typings/cachedir.d.ts +5 -0
  207. package/src/typings/node-pager.d.ts +4 -0
  208. package/src/util/array.ts +16 -0
  209. package/src/util/cache.ts +11 -0
  210. package/src/util/eslint.ts +162 -0
  211. package/src/util/filter-script.ts +45 -0
  212. package/src/util/type-check.ts +8 -0
  213. package/static/example-filter-script.js +49 -0
  214. package/static/example-fixable-maker-script.js +47 -0
@@ -0,0 +1,41 @@
1
+ import chalk from 'chalk';
2
+ import { ERROR_COLOR, FAILED_COLOR, WARNING_COLOR } from './colors.js';
3
+ function pluralize(word, count) {
4
+ return count > 1 ? `${word}s` : word;
5
+ }
6
+ export function formatByFiles(results) {
7
+ let errorCount = 0;
8
+ let failureCount = 0;
9
+ let passCount = 0;
10
+ let warningCount = 0;
11
+ results.forEach(function (result) {
12
+ const messages = result.messages;
13
+ if (messages.length === 0) {
14
+ passCount++;
15
+ }
16
+ else {
17
+ failureCount++;
18
+ warningCount += result.warningCount;
19
+ errorCount += result.errorCount;
20
+ }
21
+ });
22
+ const fileCount = passCount + failureCount;
23
+ const problemCount = errorCount + warningCount;
24
+ let summary = '';
25
+ summary += `- ${fileCount} ${pluralize('file', fileCount)}`;
26
+ summary += ' (';
27
+ summary += `${passCount} ${pluralize('file', passCount)} passed`;
28
+ summary += ', ';
29
+ summary += chalk[FAILED_COLOR](`${failureCount} ${pluralize('file', failureCount)} failed`);
30
+ summary += ') checked.\n';
31
+ if (problemCount > 0) {
32
+ summary += `- ${problemCount} ${pluralize('problem', problemCount)}`;
33
+ summary += ' (';
34
+ summary += chalk[ERROR_COLOR](`${errorCount} ${pluralize('error', errorCount)}`);
35
+ summary += ', ';
36
+ summary += chalk[WARNING_COLOR](`${warningCount} ${pluralize('warning', warningCount)}`);
37
+ summary += ') found.';
38
+ }
39
+ return chalk.bold(summary);
40
+ }
41
+ //# sourceMappingURL=format-by-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-by-files.js","sourceRoot":"","sources":["../../src/formatter/format-by-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvE,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC5C,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA4B;IACxD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,OAAO,CAAC,OAAO,CAAC,UAAU,MAAM;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,SAAS,EAAE,CAAC;SACb;aAAM;YACL,YAAY,EAAE,CAAC;YACf,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;YACpC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;SACjC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;IAC3C,MAAM,YAAY,GAAG,UAAU,GAAG,YAAY,CAAC;IAE/C,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,OAAO,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;IAC5D,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,IAAI,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC;IACjE,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,YAAY,IAAI,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAC5F,OAAO,IAAI,cAAc,CAAC;IAE1B,IAAI,YAAY,GAAG,CAAC,EAAE;QACpB,OAAO,IAAI,KAAK,YAAY,IAAI,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,IAAI,CAAC;QAChB,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,UAAU,IAAI,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,IAAI,IAAI,CAAC;QAChB,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,YAAY,IAAI,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;QACzF,OAAO,IAAI,UAAU,CAAC;KACvB;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ESLint } from 'eslint';
2
+ export declare function formatByRules(results: ESLint.LintResult[], _data?: ESLint.LintResultData): string;
3
+ //# sourceMappingURL=format-by-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-by-rules.d.ts","sourceRoot":"","sources":["../../src/formatter/format-by-rules.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAShC,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAwBjG"}
@@ -0,0 +1,34 @@
1
+ import { createRequire as _createRequire } from "module";
2
+ const __require = _createRequire(import.meta.url);
3
+ import chalk from 'chalk';
4
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
5
+ const Table = __require("cli-table");
6
+ // import terminalLink from 'terminal-link';
7
+ import { ERROR_COLOR } from './colors.js';
8
+ import { takeRuleStatistics } from './take-rule-statistics.js';
9
+ function numCell(num) {
10
+ return num > 0 ? chalk[ERROR_COLOR].bold(num) : num.toString();
11
+ }
12
+ export function formatByRules(results, _data) {
13
+ const ruleStatistics = takeRuleStatistics(results);
14
+ const table = new Table({
15
+ head: ['Rule', 'Error', 'Warning', 'is fixable', 'has suggestions'],
16
+ });
17
+ ruleStatistics.forEach((ruleStatistic) => {
18
+ const { ruleId, errorCount, warningCount, isFixableCount, hasSuggestionsCount } = ruleStatistic;
19
+ // NOTE: Disable documentation links temporarily due to problems with cli-table.
20
+ // ref: https://github.com/mizdra/eslint-interactive/issues/81
21
+ // const ruleMetaData = data?.rulesMeta[ruleId];
22
+ // const ruleCell = ruleMetaData?.docs?.url ? terminalLink(ruleId, ruleMetaData?.docs.url) : ruleId;
23
+ const ruleCell = ruleId;
24
+ table.push([
25
+ ruleCell,
26
+ numCell(errorCount),
27
+ numCell(warningCount),
28
+ numCell(isFixableCount),
29
+ numCell(hasSuggestionsCount),
30
+ ]);
31
+ });
32
+ return table.toString();
33
+ }
34
+ //# sourceMappingURL=format-by-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-by-rules.js","sourceRoot":"","sources":["../../src/formatter/format-by-rules.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,iEAAiE;AACjE,qCAAoC;AAEpC,4CAA4C;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,SAAS,OAAO,CAAC,GAAW;IAC1B,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAA4B,EAAE,KAA6B;IACvF,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,CAAC;KACpE,CAAC,CAAC;IAEH,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;QACvC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,aAAa,CAAC;QAEhG,gFAAgF;QAChF,8DAA8D;QAC9D,gDAAgD;QAChD,oGAAoG;QACpG,MAAM,QAAQ,GAAG,MAAM,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ;YACR,OAAO,CAAC,UAAU,CAAC;YACnB,OAAO,CAAC,YAAY,CAAC;YACrB,OAAO,CAAC,cAAc,CAAC;YACvB,OAAO,CAAC,mBAAmB,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ESLint } from 'eslint';
2
+ export { takeRuleStatistics, type RuleStatistic } from './take-rule-statistics.js';
3
+ export declare function format(results: ESLint.LintResult[], data?: ESLint.LintResultData): string;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEnF,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAEzF"}
@@ -0,0 +1,7 @@
1
+ import { formatByFiles } from './format-by-files.js';
2
+ import { formatByRules } from './format-by-rules.js';
3
+ export { takeRuleStatistics } from './take-rule-statistics.js';
4
+ export function format(results, data) {
5
+ return formatByFiles(results) + '\n' + formatByRules(results, data);
6
+ }
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAsB,MAAM,2BAA2B,CAAC;AAEnF,MAAM,UAAU,MAAM,CAAC,OAA4B,EAAE,IAA4B;IAC/E,OAAO,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { ESLint } from 'eslint';
2
+ /**
3
+ * The type representing the lint results of a rule unit.
4
+ */
5
+ export declare type RuleStatistic = {
6
+ ruleId: string;
7
+ errorCount: number;
8
+ warningCount: number;
9
+ isFixableCount: number;
10
+ isFixableErrorCount: number;
11
+ isFixableWarningCount: number;
12
+ hasSuggestionsCount: number;
13
+ hasSuggestionsErrorCount: number;
14
+ hasSuggestionsWarningCount: number;
15
+ };
16
+ /** ルールごとのエラー/警告の件数などの統計を取る */
17
+ export declare function takeRuleStatistics(results: ESLint.LintResult[]): RuleStatistic[];
18
+ //# sourceMappingURL=take-rule-statistics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take-rule-statistics.d.ts","sourceRoot":"","sources":["../../src/formatter/take-rule-statistics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAGxC;;GAEG;AACH,oBAAY,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,MAAM,CAAC;IACjC,0BAA0B,EAAE,MAAM,CAAC;CACpC,CAAC;AAoCF,8BAA8B;AAC9B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,aAAa,EAAE,CAYhF"}
@@ -0,0 +1,51 @@
1
+ import { groupBy } from '../util/array.js';
2
+ /** 指定されたルールのエラー/警告の件数などの統計を取る */
3
+ function takeRuleStatistic(ruleId, messages) {
4
+ let errorCount = 0;
5
+ let warningCount = 0;
6
+ let isFixableErrorCount = 0;
7
+ let isFixableWarningCount = 0;
8
+ let hasSuggestionsErrorCount = 0;
9
+ let hasSuggestionsWarningCount = 0;
10
+ for (const message of messages) {
11
+ if (message.severity === 2) {
12
+ errorCount++;
13
+ if (message.fix)
14
+ isFixableErrorCount++;
15
+ if (message.suggestions && message.suggestions.length > 0)
16
+ hasSuggestionsErrorCount++;
17
+ }
18
+ else if (message.severity === 1) {
19
+ warningCount++;
20
+ if (message.fix)
21
+ isFixableWarningCount++;
22
+ if (message.suggestions && message.suggestions.length > 0)
23
+ hasSuggestionsWarningCount++;
24
+ }
25
+ }
26
+ return {
27
+ ruleId,
28
+ errorCount,
29
+ warningCount,
30
+ isFixableCount: isFixableErrorCount + isFixableWarningCount,
31
+ isFixableErrorCount: isFixableErrorCount,
32
+ isFixableWarningCount: isFixableWarningCount,
33
+ hasSuggestionsCount: hasSuggestionsErrorCount + hasSuggestionsWarningCount,
34
+ hasSuggestionsErrorCount,
35
+ hasSuggestionsWarningCount,
36
+ };
37
+ }
38
+ /** ルールごとのエラー/警告の件数などの統計を取る */
39
+ export function takeRuleStatistics(results) {
40
+ const messages = results.flatMap((result) => result.messages).filter((message) => message.ruleId !== null);
41
+ const ruleIdToMessages = groupBy(messages, (message) => message.ruleId);
42
+ const ruleStatistics = [];
43
+ for (const [ruleId, messages] of ruleIdToMessages) {
44
+ // NOTE: Exclude problems with a null `ruleId`.
45
+ // ref: ref: https://github.com/eslint/eslint/blob/f1b7499a5162d3be918328ce496eb80692353a5a/docs/developer-guide/nodejs-api.md?plain=1#L372
46
+ if (ruleId !== null)
47
+ ruleStatistics.push(takeRuleStatistic(ruleId, messages));
48
+ }
49
+ return ruleStatistics;
50
+ }
51
+ //# sourceMappingURL=take-rule-statistics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"take-rule-statistics.js","sourceRoot":"","sources":["../../src/formatter/take-rule-statistics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAiB3C,iCAAiC;AACjC,SAAS,iBAAiB,CAAC,MAAc,EAAE,QAA8B;IACvE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,IAAI,wBAAwB,GAAG,CAAC,CAAC;IACjC,IAAI,0BAA0B,GAAG,CAAC,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;YAC1B,UAAU,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,GAAG;gBAAE,mBAAmB,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAAE,wBAAwB,EAAE,CAAC;SACvF;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE;YACjC,YAAY,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,GAAG;gBAAE,qBAAqB,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAAE,0BAA0B,EAAE,CAAC;SACzF;KACF;IAED,OAAO;QACL,MAAM;QACN,UAAU;QACV,YAAY;QACZ,cAAc,EAAE,mBAAmB,GAAG,qBAAqB;QAC3D,mBAAmB,EAAE,mBAAmB;QACxC,qBAAqB,EAAE,qBAAqB;QAC5C,mBAAmB,EAAE,wBAAwB,GAAG,0BAA0B;QAC1E,wBAAwB;QACxB,0BAA0B;KAC3B,CAAC;AACJ,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IAE3G,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAExE,MAAM,cAAc,GAAoB,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,gBAAgB,EAAE;QACjD,+CAA+C;QAC/C,2IAA2I;QAC3I,IAAI,MAAM,KAAK,IAAI;YAAE,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;KAC/E;IACD,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { run, type Options } from './cli/run.js';
2
+ export { Core, type Config } from './core.js';
3
+ export { takeRuleStatistics, type RuleStatistic } from './formatter/index.js';
4
+ export { type FixableMaker, type SuggestionFilter, type FixContext } from './plugin/index.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { run } from './cli/run.js';
2
+ export { Core } from './core.js';
3
+ export { takeRuleStatistics } from './formatter/index.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAgB,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,IAAI,EAAe,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAsB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Rule } from 'eslint';
2
+ import { FixContext } from '../index.js';
3
+ export declare type FixToApplyAutoFixesArgs = {};
4
+ /**
5
+ * Create fix to apply auto-fixes.
6
+ */
7
+ export declare function createFixToApplyAutoFixes(context: FixContext, _args: FixToApplyAutoFixesArgs): Rule.Fix[];
8
+ //# sourceMappingURL=apply-auto-fixes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-auto-fixes.d.ts","sourceRoot":"","sources":["../../../src/plugin/fix/apply-auto-fixes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,oBAAY,uBAAuB,GAAG,EAAE,CAAC;AAEzC;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,CAEzG"}
@@ -0,0 +1,8 @@
1
+ import { notEmpty } from '../../util/type-check.js';
2
+ /**
3
+ * Create fix to apply auto-fixes.
4
+ */
5
+ export function createFixToApplyAutoFixes(context, _args) {
6
+ return context.messages.map((message) => message.fix).filter(notEmpty);
7
+ }
8
+ //# sourceMappingURL=apply-auto-fixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-auto-fixes.js","sourceRoot":"","sources":["../../../src/plugin/fix/apply-auto-fixes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAMpD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAmB,EAAE,KAA8B;IAC3F,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Linter, Rule } from 'eslint';
2
+ import { FixContext } from '../index.js';
3
+ export declare type SuggestionFilter = (suggestions: Linter.LintSuggestion[], message: Linter.LintMessage, context: FixContext) => Linter.LintSuggestion | null | undefined;
4
+ export declare type FixToApplySuggestionsArgs = {
5
+ filter: SuggestionFilter;
6
+ };
7
+ /**
8
+ * Create fix to apply suggestions.
9
+ */
10
+ export declare function createFixToApplySuggestions(context: FixContext, args: FixToApplySuggestionsArgs): Rule.Fix[];
11
+ //# sourceMappingURL=apply-suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-suggestions.d.ts","sourceRoot":"","sources":["../../../src/plugin/fix/apply-suggestions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,oBAAY,gBAAgB,GAAG,CAC7B,WAAW,EAAE,MAAM,CAAC,cAAc,EAAE,EACpC,OAAO,EAAE,MAAM,CAAC,WAAW,EAC3B,OAAO,EAAE,UAAU,KAChB,MAAM,CAAC,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;AAE9C,oBAAY,yBAAyB,GAAG;IACtC,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAsBF;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,yBAAyB,GAAG,IAAI,CAAC,GAAG,EAAE,CAO5G"}
@@ -0,0 +1,25 @@
1
+ function getApplicableSuggestion(message, filter, context) {
2
+ if (!message.suggestions || message.suggestions.length === 0)
3
+ return null;
4
+ const suggestion = filter(message.suggestions, message, context);
5
+ return suggestion !== null && suggestion !== void 0 ? suggestion : null;
6
+ }
7
+ function generateFixPerMessage(context, filter, message) {
8
+ const suggestion = getApplicableSuggestion(message, filter, context);
9
+ if (!suggestion)
10
+ return null;
11
+ return suggestion.fix;
12
+ }
13
+ /**
14
+ * Create fix to apply suggestions.
15
+ */
16
+ export function createFixToApplySuggestions(context, args) {
17
+ const fixes = [];
18
+ for (const message of context.messages) {
19
+ const fix = generateFixPerMessage(context, args.filter, message);
20
+ if (fix)
21
+ fixes.push(fix);
22
+ }
23
+ return fixes;
24
+ }
25
+ //# sourceMappingURL=apply-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-suggestions.js","sourceRoot":"","sources":["../../../src/plugin/fix/apply-suggestions.ts"],"names":[],"mappings":"AAaA,SAAS,uBAAuB,CAC9B,OAA2B,EAC3B,MAAwB,EACxB,OAAmB;IAEnB,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC;AAC5B,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAmB,EACnB,MAAwB,EACxB,OAA2B;IAE3B,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,UAAU,CAAC,GAAG,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAmB,EAAE,IAA+B;IAC9F,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;QACtC,MAAM,GAAG,GAAG,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC1B;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Rule } from 'eslint';
2
+ import { FixContext } from '../index.js';
3
+ export declare type FixToDisablePerFileArgs = {
4
+ description?: string;
5
+ };
6
+ /**
7
+ * Create fix to add disable comment per file.
8
+ */
9
+ export declare function createFixToDisablePerFile(context: FixContext, args: FixToDisablePerFileArgs): Rule.Fix[];
10
+ //# sourceMappingURL=disable-per-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable-per-file.d.ts","sourceRoot":"","sources":["../../../src/plugin/fix/disable-per-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAW9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,oBAAY,uBAAuB,GAAG;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA+BF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,CAGxG"}
@@ -0,0 +1,39 @@
1
+ import { unique } from '../../util/array.js';
2
+ import { findShebang, mergeRuleIdsAndDescription, parseDisableComment, toCommentText, } from '../../util/eslint.js';
3
+ import { notEmpty } from '../../util/type-check.js';
4
+ function findDisableCommentPerFile(commentsInFile) {
5
+ return commentsInFile.map(parseDisableComment).find((comment) => (comment === null || comment === void 0 ? void 0 : comment.scope) === 'file');
6
+ }
7
+ function generateFix(context, description) {
8
+ var _a;
9
+ const ruleIdsToDisable = unique(context.messages.map((message) => message.ruleId).filter(notEmpty));
10
+ if (ruleIdsToDisable.length === 0)
11
+ return null;
12
+ const commentsInFile = context.sourceCode.getAllComments();
13
+ const disableCommentPerFile = findDisableCommentPerFile(commentsInFile);
14
+ if (disableCommentPerFile) {
15
+ const text = toCommentText({
16
+ type: 'Block',
17
+ scope: 'file',
18
+ ...mergeRuleIdsAndDescription(disableCommentPerFile, {
19
+ ruleIds: ruleIdsToDisable,
20
+ description,
21
+ }),
22
+ });
23
+ return context.fixer.replaceTextRange(disableCommentPerFile.range, text);
24
+ }
25
+ else {
26
+ const text = toCommentText({ type: 'Block', scope: 'file', ruleIds: ruleIdsToDisable, description }) + '\n';
27
+ const shebang = findShebang(context.sourceCode.text);
28
+ // if shebang exists, insert comment after shebang
29
+ return context.fixer.insertTextAfterRange((_a = shebang === null || shebang === void 0 ? void 0 : shebang.range) !== null && _a !== void 0 ? _a : [0, 0], text);
30
+ }
31
+ }
32
+ /**
33
+ * Create fix to add disable comment per file.
34
+ */
35
+ export function createFixToDisablePerFile(context, args) {
36
+ const fix = generateFix(context, args.description);
37
+ return fix ? [fix] : [];
38
+ }
39
+ //# sourceMappingURL=disable-per-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable-per-file.js","sourceRoot":"","sources":["../../../src/plugin/fix/disable-per-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAEL,WAAW,EACX,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAOpD,SAAS,yBAAyB,CAAC,cAAyB;IAC1D,OAAO,cAAc,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,MAAK,MAAM,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,WAAW,CAAC,OAAmB,EAAE,WAAoB;;IAC5D,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpG,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;IAC3D,MAAM,qBAAqB,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;IACxE,IAAI,qBAAqB,EAAE;QACzB,MAAM,IAAI,GAAG,aAAa,CAAC;YACzB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,MAAM;YACb,GAAG,0BAA0B,CAAC,qBAAqB,EAAE;gBACnD,OAAO,EAAE,gBAAgB;gBACzB,WAAW;aACZ,CAAC;SACH,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAC1E;SAAM;QACL,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;QAE5G,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrD,kDAAkD;QAClD,OAAO,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KAC3E;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAmB,EAAE,IAA6B;IAC1F,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Rule } from 'eslint';
2
+ import { FixContext } from '../index.js';
3
+ export declare type FixToDisablePerLineArgs = {
4
+ description?: string;
5
+ };
6
+ /**
7
+ * Create fix to add disable comment per line.
8
+ */
9
+ export declare function createFixToDisablePerLine(context: FixContext, args: FixToDisablePerLineArgs): Rule.Fix[];
10
+ //# sourceMappingURL=disable-per-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable-per-line.d.ts","sourceRoot":"","sources":["../../../src/plugin/fix/disable-per-line.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,oBAAY,uBAAuB,GAAG;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA4CF;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAAC,GAAG,EAAE,CAQxG"}
@@ -0,0 +1,54 @@
1
+ import { groupBy, unique } from '../../util/array.js';
2
+ import { mergeRuleIdsAndDescription, parseDisableComment, toCommentText } from '../../util/eslint.js';
3
+ import { notEmpty } from '../../util/type-check.js';
4
+ function findDisableCommentPerLine(commentsInFile, line) {
5
+ const commentsInPreviousLine = commentsInFile.filter((comment) => { var _a; return ((_a = comment.loc) === null || _a === void 0 ? void 0 : _a.start.line) === line - 1; });
6
+ return commentsInPreviousLine.map(parseDisableComment).find((comment) => (comment === null || comment === void 0 ? void 0 : comment.scope) === 'next-line');
7
+ }
8
+ function generateFixPerLine(context, description, line, messagesInLine) {
9
+ const ruleIdsToDisable = unique(messagesInLine.map((message) => message.ruleId).filter(notEmpty));
10
+ if (ruleIdsToDisable.length === 0)
11
+ return null;
12
+ const commentsInFile = context.sourceCode.getAllComments();
13
+ const disableCommentPerLine = findDisableCommentPerLine(commentsInFile, line);
14
+ if (disableCommentPerLine) {
15
+ const text = toCommentText({
16
+ type: 'Block',
17
+ scope: 'next-line',
18
+ ...mergeRuleIdsAndDescription(disableCommentPerLine, {
19
+ ruleIds: ruleIdsToDisable,
20
+ description,
21
+ }),
22
+ });
23
+ return context.fixer.replaceTextRange(disableCommentPerLine.range, text);
24
+ }
25
+ else {
26
+ const headNodeIndex = context.sourceCode.getIndexFromLoc({ line: line, column: 0 });
27
+ const headNode = context.sourceCode.getNodeByRangeIndex(headNodeIndex);
28
+ if (headNode === null)
29
+ return null; // For some reason, it seems to be null sometimes.
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ if (headNode.type === 'JSXText') {
32
+ const commentText = toCommentText({ type: 'Block', scope: 'next-line', ruleIds: ruleIdsToDisable, description });
33
+ return context.fixer.insertTextBeforeRange([headNodeIndex, headNodeIndex], '{' + commentText + '}\n');
34
+ }
35
+ else {
36
+ const commentText = toCommentText({ type: 'Line', scope: 'next-line', ruleIds: ruleIdsToDisable, description });
37
+ return context.fixer.insertTextBeforeRange([headNodeIndex, headNodeIndex], commentText + '\n');
38
+ }
39
+ }
40
+ }
41
+ /**
42
+ * Create fix to add disable comment per line.
43
+ */
44
+ export function createFixToDisablePerLine(context, args) {
45
+ const lineToMessages = groupBy(context.messages, (message) => message.line);
46
+ const fixes = [];
47
+ for (const [line, messagesInLine] of lineToMessages) {
48
+ const fix = generateFixPerLine(context, args.description, line, messagesInLine);
49
+ if (fix)
50
+ fixes.push(fix);
51
+ }
52
+ return fixes;
53
+ }
54
+ //# sourceMappingURL=disable-per-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable-per-line.js","sourceRoot":"","sources":["../../../src/plugin/fix/disable-per-line.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { type SuggestionFilter, type FixToApplySuggestionsArgs, createFixToApplySuggestions, } from './apply-suggestions.js';
2
+ export { type FixToApplyAutoFixesArgs, createFixToApplyAutoFixes } from './apply-auto-fixes.js';
3
+ export { type FixToDisablePerFileArgs, createFixToDisablePerFile } from './disable-per-file.js';
4
+ export { type FixToDisablePerLineArgs, createFixToDisablePerLine } from './disable-per-line.js';
5
+ export { type FixableMaker, type FixToMakeFixableAndFixArgs, createFixToMakeFixableAndFix, } from './make-fixable-and-fix.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugin/fix/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC9B,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,KAAK,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAE,KAAK,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAC/B,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { createFixToApplySuggestions, } from './apply-suggestions.js';
2
+ export { createFixToApplyAutoFixes } from './apply-auto-fixes.js';
3
+ export { createFixToDisablePerFile } from './disable-per-file.js';
4
+ export { createFixToDisablePerLine } from './disable-per-line.js';
5
+ export { createFixToMakeFixableAndFix, } from './make-fixable-and-fix.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugin/fix/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAgC,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAgC,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAAgC,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,EAGL,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Linter, Rule } from 'eslint';
2
+ import type { Node } from 'estree';
3
+ import { FixContext } from '../index.js';
4
+ export declare type FixableMaker = (message: Linter.LintMessage, node: Node | null, context: FixContext) => Rule.Fix | null | undefined;
5
+ export declare type FixToMakeFixableAndFixArgs = {
6
+ fixableMaker: FixableMaker;
7
+ };
8
+ /**
9
+ * Create fix to make fixable and fix.
10
+ */
11
+ export declare function createFixToMakeFixableAndFix(context: FixContext, args: FixToMakeFixableAndFixArgs): Rule.Fix[];
12
+ //# sourceMappingURL=make-fixable-and-fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-fixable-and-fix.d.ts","sourceRoot":"","sources":["../../../src/plugin/fix/make-fixable-and-fix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAc,MAAM,QAAQ,CAAC;AAElD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,oBAAY,YAAY,GAAG,CACzB,OAAO,EAAE,MAAM,CAAC,WAAW,EAC3B,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,UAAU,KAChB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,SAAS,CAAC;AAEjC,oBAAY,0BAA0B,GAAG;IACvC,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAyDF;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,0BAA0B,GAAG,IAAI,CAAC,GAAG,EAAE,CAE9G"}
@@ -0,0 +1,61 @@
1
+ import { traverse } from 'estraverse';
2
+ import { unreachable } from '../../util/type-check.js';
3
+ /**
4
+ * Check the node is the source of the message.
5
+ */
6
+ function isMessageSourceNode(sourceCode, node, message) {
7
+ if (message.nodeType === undefined)
8
+ return false;
9
+ // In some cases there may be no `endLine` or `endColumn`.
10
+ if (message.endLine === undefined || message.endColumn === undefined)
11
+ return false;
12
+ // If `nodeType` is exists, `range` must be exists.
13
+ if (node.range === undefined)
14
+ return unreachable();
15
+ const index = sourceCode.getIndexFromLoc({
16
+ line: message.line,
17
+ // NOTE: `column` of `ESLint.LintMessage` is 1-based, but `column` of `ESTree.Position` is 0-based.
18
+ column: message.column - 1,
19
+ });
20
+ const endIndex = sourceCode.getIndexFromLoc({
21
+ line: message.endLine,
22
+ // NOTE: `column` of `ESLint.LintMessage` is 1-based, but `column` of `ESTree.Position` is 0-based.
23
+ column: message.endColumn - 1,
24
+ });
25
+ const nodeType = message.nodeType;
26
+ return node.range[0] === index && node.range[1] === endIndex && node.type === nodeType;
27
+ }
28
+ function getMessageToSourceNode(sourceCode, messages) {
29
+ const result = new Map();
30
+ traverse(sourceCode.ast, {
31
+ // Required to traverse extension nodes such as `JSXElement`.
32
+ fallback: 'iteration',
33
+ enter(node) {
34
+ for (const message of messages) {
35
+ if (isMessageSourceNode(sourceCode, node, message)) {
36
+ result.set(message, node);
37
+ }
38
+ }
39
+ },
40
+ });
41
+ return result;
42
+ }
43
+ function generateFixes(context, args) {
44
+ var _a;
45
+ const messageToNode = getMessageToSourceNode(context.sourceCode, context.messages);
46
+ const fixes = [];
47
+ for (const message of context.messages) {
48
+ const node = (_a = messageToNode.get(message)) !== null && _a !== void 0 ? _a : null;
49
+ const fix = args.fixableMaker(message, node, context);
50
+ if (fix)
51
+ fixes.push(fix);
52
+ }
53
+ return fixes;
54
+ }
55
+ /**
56
+ * Create fix to make fixable and fix.
57
+ */
58
+ export function createFixToMakeFixableAndFix(context, args) {
59
+ return generateFixes(context, args);
60
+ }
61
+ //# sourceMappingURL=make-fixable-and-fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-fixable-and-fix.js","sourceRoot":"","sources":["../../../src/plugin/fix/make-fixable-and-fix.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAavD;;GAEG;AACH,SAAS,mBAAmB,CAAC,UAAsB,EAAE,IAAU,EAAE,OAA2B;IAC1F,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEjD,0DAA0D;IAC1D,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACnF,mDAAmD;IACnD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,WAAW,EAAE,CAAC;IAEnD,MAAM,KAAK,GAAG,UAAU,CAAC,eAAe,CAAC;QACvC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,mGAAmG;QACnG,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;KAC3B,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC;QAC1C,IAAI,EAAE,OAAO,CAAC,OAAO;QACrB,mGAAmG;QACnG,MAAM,EAAE,OAAO,CAAC,SAAS,GAAG,CAAC;KAC9B,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AACzF,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAsB,EAAE,QAA8B;IACpF,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEnD,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE;QACvB,6DAA6D;QAC7D,QAAQ,EAAE,WAAW;QACrB,KAAK,CAAC,IAAU;YACd,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,IAAI,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;oBAClD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;iBAC3B;aACF;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,OAAmB,EAAE,IAAgC;;IAC1E,MAAM,aAAa,GAAG,sBAAsB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;QACtC,MAAM,IAAI,GAAG,MAAA,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,mCAAI,IAAI,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC1B;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAAmB,EAAE,IAAgC;IAChG,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { ESLint, Rule } from 'eslint';
2
+ import { Fix } from './index.js';
3
+ export declare const OVERLAPPED_PROBLEM_MESSAGE = "overlapped";
4
+ export declare type FixRuleOption = {
5
+ ruleIds: string[];
6
+ results: ESLint.LintResult[];
7
+ fix: Fix;
8
+ };
9
+ export declare const fixRule: Rule.RuleModule;
10
+ //# sourceMappingURL=fix-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-rule.d.ts","sourceRoot":"","sources":["../../src/plugin/fix-rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAStC,OAAO,EAAE,GAAG,EAAc,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAyDvD,oBAAY,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,IAAI,CAAC,UAmE1B,CAAC"}