@so1ve/eslint-plugin 0.35.5 → 0.36.1

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.
package/dist/index.cjs CHANGED
@@ -4,9 +4,9 @@ const utils = require('@typescript-eslint/utils');
4
4
 
5
5
  const createEslintRule = utils.ESLintUtils.RuleCreator((ruleName) => ruleName);
6
6
 
7
- const RULE_NAME$4 = "generic-spacing";
7
+ const RULE_NAME$5 = "generic-spacing";
8
8
  const genericSpacing = createEslintRule({
9
- name: RULE_NAME$4,
9
+ name: RULE_NAME$5,
10
10
  meta: {
11
11
  type: "suggestion",
12
12
  docs: {
@@ -170,9 +170,9 @@ const genericSpacing = createEslintRule({
170
170
  }
171
171
  });
172
172
 
173
- const RULE_NAME$3 = "import-dedupe";
173
+ const RULE_NAME$4 = "import-dedupe";
174
174
  const importDedupe = createEslintRule({
175
- name: RULE_NAME$3,
175
+ name: RULE_NAME$4,
176
176
  meta: {
177
177
  type: "problem",
178
178
  docs: {
@@ -220,9 +220,9 @@ const importDedupe = createEslintRule({
220
220
  }
221
221
  });
222
222
 
223
- const RULE_NAME$2 = "space-between-generic-and-paren";
223
+ const RULE_NAME$3 = "space-between-generic-and-paren";
224
224
  const spaceBetweenGenericAndParen = createEslintRule({
225
- name: RULE_NAME$2,
225
+ name: RULE_NAME$3,
226
226
  meta: {
227
227
  type: "suggestion",
228
228
  docs: {
@@ -232,7 +232,7 @@ const spaceBetweenGenericAndParen = createEslintRule({
232
232
  fixable: "code",
233
233
  schema: [],
234
234
  messages: {
235
- spaceBetweenGenericAndParenMismatch: "Space between generic and paren mismatch"
235
+ noSpaceBetweenGenericAndParen: "Expected no space between generic type parameters and paren"
236
236
  }
237
237
  },
238
238
  defaultOptions: [],
@@ -261,7 +261,7 @@ const spaceBetweenGenericAndParen = createEslintRule({
261
261
  }
262
262
  },
263
263
  node,
264
- messageId: "spaceBetweenGenericAndParenMismatch",
264
+ messageId: "noSpaceBetweenGenericAndParen",
265
265
  *fix(fixer) {
266
266
  yield fixer.replaceTextRange([spaceStartRange, spaceStartRange + postSpace.length], "");
267
267
  }
@@ -284,7 +284,7 @@ const spaceBetweenGenericAndParen = createEslintRule({
284
284
  }
285
285
  },
286
286
  node,
287
- messageId: "spaceBetweenGenericAndParenMismatch",
287
+ messageId: "noSpaceBetweenGenericAndParen",
288
288
  *fix(fixer) {
289
289
  yield fixer.replaceTextRange([spaceEndRange - preSpace.length, spaceEndRange], "");
290
290
  }
@@ -296,19 +296,19 @@ const spaceBetweenGenericAndParen = createEslintRule({
296
296
  }
297
297
  });
298
298
 
299
- const RULE_NAME$1 = "space-in-empty-block";
299
+ const RULE_NAME$2 = "space-in-empty-block";
300
300
  const spaceInEmptyBlock = createEslintRule({
301
- name: RULE_NAME$1,
301
+ name: RULE_NAME$2,
302
302
  meta: {
303
303
  type: "suggestion",
304
304
  docs: {
305
- description: "Spaces in empty block",
305
+ description: "Disallow spaces in empty block",
306
306
  recommended: "error"
307
307
  },
308
308
  fixable: "code",
309
309
  schema: [],
310
310
  messages: {
311
- spaceInEmptyBlockMismatch: "Space in empty block mismatch"
311
+ noSpaceInEmptyBlock: "Expected no space in empty block"
312
312
  }
313
313
  },
314
314
  defaultOptions: [],
@@ -331,7 +331,7 @@ const spaceInEmptyBlock = createEslintRule({
331
331
  column: node.loc.end.column - 1 + postSpace.length
332
332
  }
333
333
  },
334
- messageId: "spaceInEmptyBlockMismatch",
334
+ messageId: "noSpaceInEmptyBlock",
335
335
  *fix(fixer) {
336
336
  yield fixer.replaceTextRange([node.range[0] + 1, spaceStartRange + postSpace.length], "");
337
337
  }
@@ -352,7 +352,7 @@ const spaceInEmptyBlock = createEslintRule({
352
352
  column: node.loc.start.column
353
353
  }
354
354
  },
355
- messageId: "spaceInEmptyBlockMismatch",
355
+ messageId: "noSpaceInEmptyBlock",
356
356
  *fix(fixer) {
357
357
  yield fixer.replaceTextRange([spaceEndRange - preSpace.length, spaceEndRange], "");
358
358
  }
@@ -363,9 +363,9 @@ const spaceInEmptyBlock = createEslintRule({
363
363
  }
364
364
  });
365
365
 
366
- const RULE_NAME = "semi-spacing";
366
+ const RULE_NAME$1 = "semi-spacing";
367
367
  const semiSpacing = createEslintRule({
368
- name: RULE_NAME,
368
+ name: RULE_NAME$1,
369
369
  meta: {
370
370
  type: "suggestion",
371
371
  docs: {
@@ -375,7 +375,7 @@ const semiSpacing = createEslintRule({
375
375
  fixable: "code",
376
376
  schema: [],
377
377
  messages: {
378
- semiSpacingMismatch: "Semi spacing mismatch"
378
+ noSpaceBeforeSemi: "Expected no space before semicolon"
379
379
  }
380
380
  },
381
381
  defaultOptions: [],
@@ -401,7 +401,7 @@ const semiSpacing = createEslintRule({
401
401
  }
402
402
  },
403
403
  node,
404
- messageId: "semiSpacingMismatch",
404
+ messageId: "noSpaceBeforeSemi",
405
405
  *fix(fixer) {
406
406
  yield fixer.removeRange([spaceStart, spaceEnd]);
407
407
  }
@@ -412,13 +412,63 @@ const semiSpacing = createEslintRule({
412
412
  }
413
413
  });
414
414
 
415
+ const RULE_NAME = "no-inline-type-import";
416
+ const noInlineTypeImport = createEslintRule({
417
+ name: RULE_NAME,
418
+ meta: {
419
+ type: "suggestion",
420
+ docs: {
421
+ description: "Disallow inline type import",
422
+ recommended: "error"
423
+ },
424
+ fixable: "code",
425
+ schema: [],
426
+ messages: {
427
+ noInlineTypeImport: "Expected no inline type import"
428
+ }
429
+ },
430
+ defaultOptions: [],
431
+ create: (context) => {
432
+ const sourceCode = context.getSourceCode();
433
+ return {
434
+ ImportDeclaration: (node) => {
435
+ const specifiers = node.specifiers;
436
+ const typeSpecifiers = specifiers.filter((s) => s.type === "ImportSpecifier" && s.importKind === "type");
437
+ const valueSpecifiers = specifiers.filter((s) => s.type === "ImportSpecifier" && s.importKind === "value");
438
+ if (typeSpecifiers.length && valueSpecifiers.length) {
439
+ context.report({
440
+ loc: node.loc,
441
+ messageId: "noInlineTypeImport",
442
+ *fix(fixer) {
443
+ const typeSpecifiersText = typeSpecifiers.map((s) => sourceCode.getText(s).replace("type ", "")).join(", ");
444
+ const valueSpecifiersText = valueSpecifiers.map((s) => sourceCode.getText(s)).join(", ");
445
+ yield fixer.replaceText(node, `import type { ${typeSpecifiersText} } from "${node.source.value}";
446
+ import { ${valueSpecifiersText} } from "${node.source.value}";`);
447
+ }
448
+ });
449
+ } else if (typeSpecifiers.length) {
450
+ context.report({
451
+ loc: node.loc,
452
+ messageId: "noInlineTypeImport",
453
+ *fix(fixer) {
454
+ const typeSpecifiersText = typeSpecifiers.map((s) => sourceCode.getText(s).replace("type ", "")).join(", ");
455
+ yield fixer.replaceText(node, `import type { ${typeSpecifiersText} } from "${node.source.value}";`);
456
+ }
457
+ });
458
+ }
459
+ }
460
+ };
461
+ }
462
+ });
463
+
415
464
  const index = {
416
465
  rules: {
417
466
  "import-dedupe": importDedupe,
418
467
  "generic-spacing": genericSpacing,
419
468
  "space-between-generic-and-paren": spaceBetweenGenericAndParen,
420
469
  "space-in-empty-block": spaceInEmptyBlock,
421
- "semi-spacing": semiSpacing
470
+ "semi-spacing": semiSpacing,
471
+ "no-inline-type-import": noInlineTypeImport
422
472
  }
423
473
  };
424
474
 
package/dist/index.d.ts CHANGED
@@ -4,9 +4,10 @@ declare const _default: {
4
4
  rules: {
5
5
  "import-dedupe": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"importDedupe", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
6
6
  "generic-spacing": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"genericSpacingMismatch", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
7
- "space-between-generic-and-paren": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"spaceBetweenGenericAndParenMismatch", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
8
- "space-in-empty-block": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"spaceInEmptyBlockMismatch", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
9
- "semi-spacing": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"semiSpacingMismatch", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
7
+ "space-between-generic-and-paren": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"noSpaceBetweenGenericAndParen", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
8
+ "space-in-empty-block": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"noSpaceInEmptyBlock", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
9
+ "semi-spacing": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"noSpaceBeforeSemi", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
10
+ "no-inline-type-import": _typescript_eslint_utils_dist_ts_eslint_Rule.RuleModule<"noInlineTypeImport", [], _typescript_eslint_utils_dist_ts_eslint_Rule.RuleListener>;
10
11
  };
11
12
  };
12
13
 
package/dist/index.mjs CHANGED
@@ -2,9 +2,9 @@ import { ESLintUtils } from '@typescript-eslint/utils';
2
2
 
3
3
  const createEslintRule = ESLintUtils.RuleCreator((ruleName) => ruleName);
4
4
 
5
- const RULE_NAME$4 = "generic-spacing";
5
+ const RULE_NAME$5 = "generic-spacing";
6
6
  const genericSpacing = createEslintRule({
7
- name: RULE_NAME$4,
7
+ name: RULE_NAME$5,
8
8
  meta: {
9
9
  type: "suggestion",
10
10
  docs: {
@@ -168,9 +168,9 @@ const genericSpacing = createEslintRule({
168
168
  }
169
169
  });
170
170
 
171
- const RULE_NAME$3 = "import-dedupe";
171
+ const RULE_NAME$4 = "import-dedupe";
172
172
  const importDedupe = createEslintRule({
173
- name: RULE_NAME$3,
173
+ name: RULE_NAME$4,
174
174
  meta: {
175
175
  type: "problem",
176
176
  docs: {
@@ -218,9 +218,9 @@ const importDedupe = createEslintRule({
218
218
  }
219
219
  });
220
220
 
221
- const RULE_NAME$2 = "space-between-generic-and-paren";
221
+ const RULE_NAME$3 = "space-between-generic-and-paren";
222
222
  const spaceBetweenGenericAndParen = createEslintRule({
223
- name: RULE_NAME$2,
223
+ name: RULE_NAME$3,
224
224
  meta: {
225
225
  type: "suggestion",
226
226
  docs: {
@@ -230,7 +230,7 @@ const spaceBetweenGenericAndParen = createEslintRule({
230
230
  fixable: "code",
231
231
  schema: [],
232
232
  messages: {
233
- spaceBetweenGenericAndParenMismatch: "Space between generic and paren mismatch"
233
+ noSpaceBetweenGenericAndParen: "Expected no space between generic type parameters and paren"
234
234
  }
235
235
  },
236
236
  defaultOptions: [],
@@ -259,7 +259,7 @@ const spaceBetweenGenericAndParen = createEslintRule({
259
259
  }
260
260
  },
261
261
  node,
262
- messageId: "spaceBetweenGenericAndParenMismatch",
262
+ messageId: "noSpaceBetweenGenericAndParen",
263
263
  *fix(fixer) {
264
264
  yield fixer.replaceTextRange([spaceStartRange, spaceStartRange + postSpace.length], "");
265
265
  }
@@ -282,7 +282,7 @@ const spaceBetweenGenericAndParen = createEslintRule({
282
282
  }
283
283
  },
284
284
  node,
285
- messageId: "spaceBetweenGenericAndParenMismatch",
285
+ messageId: "noSpaceBetweenGenericAndParen",
286
286
  *fix(fixer) {
287
287
  yield fixer.replaceTextRange([spaceEndRange - preSpace.length, spaceEndRange], "");
288
288
  }
@@ -294,19 +294,19 @@ const spaceBetweenGenericAndParen = createEslintRule({
294
294
  }
295
295
  });
296
296
 
297
- const RULE_NAME$1 = "space-in-empty-block";
297
+ const RULE_NAME$2 = "space-in-empty-block";
298
298
  const spaceInEmptyBlock = createEslintRule({
299
- name: RULE_NAME$1,
299
+ name: RULE_NAME$2,
300
300
  meta: {
301
301
  type: "suggestion",
302
302
  docs: {
303
- description: "Spaces in empty block",
303
+ description: "Disallow spaces in empty block",
304
304
  recommended: "error"
305
305
  },
306
306
  fixable: "code",
307
307
  schema: [],
308
308
  messages: {
309
- spaceInEmptyBlockMismatch: "Space in empty block mismatch"
309
+ noSpaceInEmptyBlock: "Expected no space in empty block"
310
310
  }
311
311
  },
312
312
  defaultOptions: [],
@@ -329,7 +329,7 @@ const spaceInEmptyBlock = createEslintRule({
329
329
  column: node.loc.end.column - 1 + postSpace.length
330
330
  }
331
331
  },
332
- messageId: "spaceInEmptyBlockMismatch",
332
+ messageId: "noSpaceInEmptyBlock",
333
333
  *fix(fixer) {
334
334
  yield fixer.replaceTextRange([node.range[0] + 1, spaceStartRange + postSpace.length], "");
335
335
  }
@@ -350,7 +350,7 @@ const spaceInEmptyBlock = createEslintRule({
350
350
  column: node.loc.start.column
351
351
  }
352
352
  },
353
- messageId: "spaceInEmptyBlockMismatch",
353
+ messageId: "noSpaceInEmptyBlock",
354
354
  *fix(fixer) {
355
355
  yield fixer.replaceTextRange([spaceEndRange - preSpace.length, spaceEndRange], "");
356
356
  }
@@ -361,9 +361,9 @@ const spaceInEmptyBlock = createEslintRule({
361
361
  }
362
362
  });
363
363
 
364
- const RULE_NAME = "semi-spacing";
364
+ const RULE_NAME$1 = "semi-spacing";
365
365
  const semiSpacing = createEslintRule({
366
- name: RULE_NAME,
366
+ name: RULE_NAME$1,
367
367
  meta: {
368
368
  type: "suggestion",
369
369
  docs: {
@@ -373,7 +373,7 @@ const semiSpacing = createEslintRule({
373
373
  fixable: "code",
374
374
  schema: [],
375
375
  messages: {
376
- semiSpacingMismatch: "Semi spacing mismatch"
376
+ noSpaceBeforeSemi: "Expected no space before semicolon"
377
377
  }
378
378
  },
379
379
  defaultOptions: [],
@@ -399,7 +399,7 @@ const semiSpacing = createEslintRule({
399
399
  }
400
400
  },
401
401
  node,
402
- messageId: "semiSpacingMismatch",
402
+ messageId: "noSpaceBeforeSemi",
403
403
  *fix(fixer) {
404
404
  yield fixer.removeRange([spaceStart, spaceEnd]);
405
405
  }
@@ -410,13 +410,63 @@ const semiSpacing = createEslintRule({
410
410
  }
411
411
  });
412
412
 
413
+ const RULE_NAME = "no-inline-type-import";
414
+ const noInlineTypeImport = createEslintRule({
415
+ name: RULE_NAME,
416
+ meta: {
417
+ type: "suggestion",
418
+ docs: {
419
+ description: "Disallow inline type import",
420
+ recommended: "error"
421
+ },
422
+ fixable: "code",
423
+ schema: [],
424
+ messages: {
425
+ noInlineTypeImport: "Expected no inline type import"
426
+ }
427
+ },
428
+ defaultOptions: [],
429
+ create: (context) => {
430
+ const sourceCode = context.getSourceCode();
431
+ return {
432
+ ImportDeclaration: (node) => {
433
+ const specifiers = node.specifiers;
434
+ const typeSpecifiers = specifiers.filter((s) => s.type === "ImportSpecifier" && s.importKind === "type");
435
+ const valueSpecifiers = specifiers.filter((s) => s.type === "ImportSpecifier" && s.importKind === "value");
436
+ if (typeSpecifiers.length && valueSpecifiers.length) {
437
+ context.report({
438
+ loc: node.loc,
439
+ messageId: "noInlineTypeImport",
440
+ *fix(fixer) {
441
+ const typeSpecifiersText = typeSpecifiers.map((s) => sourceCode.getText(s).replace("type ", "")).join(", ");
442
+ const valueSpecifiersText = valueSpecifiers.map((s) => sourceCode.getText(s)).join(", ");
443
+ yield fixer.replaceText(node, `import type { ${typeSpecifiersText} } from "${node.source.value}";
444
+ import { ${valueSpecifiersText} } from "${node.source.value}";`);
445
+ }
446
+ });
447
+ } else if (typeSpecifiers.length) {
448
+ context.report({
449
+ loc: node.loc,
450
+ messageId: "noInlineTypeImport",
451
+ *fix(fixer) {
452
+ const typeSpecifiersText = typeSpecifiers.map((s) => sourceCode.getText(s).replace("type ", "")).join(", ");
453
+ yield fixer.replaceText(node, `import type { ${typeSpecifiersText} } from "${node.source.value}";`);
454
+ }
455
+ });
456
+ }
457
+ }
458
+ };
459
+ }
460
+ });
461
+
413
462
  const index = {
414
463
  rules: {
415
464
  "import-dedupe": importDedupe,
416
465
  "generic-spacing": genericSpacing,
417
466
  "space-between-generic-and-paren": spaceBetweenGenericAndParen,
418
467
  "space-in-empty-block": spaceInEmptyBlock,
419
- "semi-spacing": semiSpacing
468
+ "semi-spacing": semiSpacing,
469
+ "no-inline-type-import": noInlineTypeImport
420
470
  }
421
471
  };
422
472
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@so1ve/eslint-plugin",
3
- "version": "0.35.5",
3
+ "version": "0.36.1",
4
4
  "author": "Anthony Fu <anthonyfu117@hotmail.com> (https://github.com/antfu/)",
5
5
  "contributors": [
6
6
  {