Skip to content

Commit

Permalink
feat(): support eslint v9 (#7)
Browse files Browse the repository at this point in the history
* feat(): pass test

* feat(): rename rule name to camelCase

* chore(): use angular test-utils

* chore

* 0.6.0-0

* fix
  • Loading branch information
rdlabo authored Dec 11, 2024
1 parent d1889aa commit 80137ca
Show file tree
Hide file tree
Showing 24 changed files with 102 additions and 120 deletions.
3 changes: 0 additions & 3 deletions .eslintignore

This file was deleted.

23 changes: 0 additions & 23 deletions .eslintrc.js

This file was deleted.

4 changes: 2 additions & 2 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ jobs:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
node-version: 20
- name: Install dependencies
run: npm install
- name: Lint
run: npm run lint
- name: Test
run: npm test
run: npm run test
env:
CI: true
- name: Build
Expand Down
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ If your project does not install `@angular-eslint` packages, please do so: https
Recommend settings is here:

```diff
{
...
+ "plugins": ["@rdlabo/rules"],
"overrides": [
module.exports = tseslint.config(
{
"files": [
"*.ts"
],
...

+ "plugins": {
+ '@rdlabo/rules': rdlabo,
+ },
"rules": {
+ "@rdlabo/rules/deny-constructor-di": "error",
+ "@rdlabo/rules/import-inject-object": "error",
Expand All @@ -37,6 +37,9 @@ Recommend settings is here:
"files": [
"*.html"
],
+ "plugins": {
+ '@rdlabo/rules': rdlabo,
+ },
"rules": {
+ "@rdlabo/rules/deny-element": [
+ "error",
Expand Down
14 changes: 14 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// @ts-check
const eslint = require('@eslint/js');
const tseslint = require('typescript-eslint');

module.exports = tseslint.config({
files: ['**/*.ts'],
ignores: ['!.*.js', '/node_modules', '/dist', '/scripts'],
extends: [
eslint.configs.recommended,
...tseslint.configs.recommended,
...tseslint.configs.stylistic,
],
rules: {},
});
31 changes: 18 additions & 13 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
{
"name": "@rdlabo/eslint-plugin-rules",
"version": "0.5.0",
"version": "0.6.0-0",
"description": "",
"engines": {
"node": ">=18.0.0"
},
"main": "dist/index.js",
"files": [
"dist"
"dist",
"package.json"
],
"scripts": {
"prepare": "husky install",
"clean": "rimraf dist",
"prebuild": "npm run clean",
"build": "tsc",
"lint": "run-s lint:ts lint:eslint lint:prettier",
"lint:ts": "tsc --noEmit",
"lint:ts": "npm run build -- --noEmit",
"lint:eslint": "eslint '**/*.{js,ts}'",
"lint:prettier": "prettier '**/*.{js,ts,yaml}' --check",
"fix": "run-s fix:eslint fix:prettier",
Expand All @@ -25,21 +26,24 @@
"test:watch": "jest --watch",
"test:coverage": "jest --coverage",
"prerelease": "npm run build",
"release": "np",
"release": "np --any-branch",
"add-rule": "ts-node scripts/add-rule",
"update": "ts-node scripts/update"
"update": "ts-node scripts/update",
"inspect": "npx @eslint/config-inspector"
},
"peerDependencies": {
"eslint": ">=5.16.0"
"eslint": ">=9.0.0"
},
"devDependencies": {
"@angular-eslint/template-parser": "^18.0.0",
"@types/eslint": "^8.56.0",
"@angular-eslint/template-parser": "^19.0.0",
"@angular-eslint/test-utils": "^19.0.2",
"@eslint/eslintrc": "^3.2.0",
"@eslint/js": "^9.16.0",
"@types/eslint": "^9.0.0",
"@types/jest": "^29.5.0",
"@typescript-eslint/eslint-plugin": "^7.1.0",
"@typescript-eslint/parser": "^7.1.0",
"@typescript-eslint/utils": "^7.1.0",
"eslint": "^8.56.0",
"@typescript-eslint/rule-tester": "^8.18.0",
"@typescript-eslint/utils": "^8.18.0",
"eslint": "^9.0.0",
"husky": "^8.0.3",
"jest": "^29.7.0",
"lint-staged": "^13.2.1",
Expand All @@ -49,7 +53,8 @@
"rimraf": "^5.0.0",
"ts-jest": "^29.1.0",
"ts-node": "^10.9.0",
"typescript": "~5.4.5"
"typescript": "~5.4.5",
"typescript-eslint": "^8.18.0"
},
"lint-staged": {
"*.{js,ts}": [
Expand Down
9 changes: 5 additions & 4 deletions scripts/lib/rules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { RuleRecommendation } from '@typescript-eslint/utils/dist/ts-eslint/Rule

const rootDir = resolve(__dirname, '../../src/rules/');

export type RuleInfo = {
export interface RuleInfo {
filePath: string;
id: string;
name: string;
Expand All @@ -15,18 +15,19 @@ export type RuleInfo = {
deprecated: boolean;
fixable: boolean;
replacedBy: string[];
};
}

export type CategoryInfo = {
export interface CategoryInfo {
id: string;
rules: RuleInfo[];
};
}

export const rules: RuleInfo[] = readdirSync(rootDir)
.sort()
.map((filename): RuleInfo => {
const filePath = join(rootDir, filename);
const name = filename.slice(0, -3);
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { meta } = require(filePath);

return {
Expand Down
5 changes: 3 additions & 2 deletions scripts/lib/update-docs-headers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ import { pluginId } from './plugin-id';
import type { RuleInfo } from './rules';
import { rules } from './rules';

type ListFormatOptions = {
interface ListFormatOptions {
type?: 'conjunction' | 'disjunction' | 'unit';
style?: 'long' | 'short' | 'narrow';
localeMatcher?: 'lookup' | 'best fit';
};
}

// eslint-disable-next-line @typescript-eslint/no-namespace
declare namespace Intl {
class ListFormat {
constructor(locale: string, options: ListFormatOptions);
Expand Down
29 changes: 21 additions & 8 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
/* DON'T EDIT THIS FILE. This is generated by 'scripts/lib/update-lib-index.ts' */

import recommended from './configs/recommended';

import denyConstructorDi from './rules/deny-constructor-di';
import denyElement from './rules/deny-element';
import denyImportFromIonicModule from './rules/deny-import-from-ionic-module';
import denySoftPrivateModifier from './rules/deny-soft-private-modifier';
import implementsIonicLifecycle from './rules/implements-ionic-lifecycle';
import importInjectObject from './rules/import-inject-object';
import signalUseAsSignal from './rules/signal-use-as-signal';

export = {
meta: {
name: '@rdlabo/rules',
},
configs: {
recommended: require('./configs/recommended'),
recommended,
},
rules: {
'deny-constructor-di': require('./rules/deny-constructor-di'),
'deny-element': require('./rules/deny-element'),
'deny-import-from-ionic-module': require('./rules/deny-import-from-ionic-module'),
'deny-soft-private-modifier': require('./rules/deny-soft-private-modifier'),
'implements-ionic-lifecycle': require('./rules/implements-ionic-lifecycle'),
'import-inject-object': require('./rules/import-inject-object'),
'signal-use-as-signal': require('./rules/signal-use-as-signal'),
'deny-constructor-di': denyConstructorDi,
'deny-element': denyElement,
'deny-import-from-ionic-module': denyImportFromIonicModule,
'deny-soft-private-modifier': denySoftPrivateModifier,
'implements-ionic-lifecycle': implementsIonicLifecycle,
'import-inject-object': importInjectObject,
'signal-use-as-signal': signalUseAsSignal,
},
};
6 changes: 3 additions & 3 deletions src/rules/deny-constructor-di.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { TSESLint } from '@typescript-eslint/utils';
import { Token } from '@typescript-eslint/types/dist/generated/ast-spec';
import { AST } from 'eslint';
import Token = AST.Token;

const rule: TSESLint.RuleModule<'denyConstructorDI', []> = {
meta: {
docs: {
description:
'This plugin disallows Dependency Injection within the constructor.',
recommended: 'stylistic',
url: '',
},
fixable: 'code',
Expand Down Expand Up @@ -79,7 +79,7 @@ const rule: TSESLint.RuleModule<'denyConstructorDI', []> = {
continue;
}

temporaryToken.push(diToken[i]);
temporaryToken.push(diToken[i] as Token);
if (
temporaryToken.filter(
(d) => d.type === 'Identifier' && d.value !== 'readonly'
Expand Down
9 changes: 4 additions & 5 deletions src/rules/deny-element.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
import { TSESLint } from '@typescript-eslint/utils';

type TemplateNode = {
interface TemplateNode {
name: string;
type: string;
loc: {
start: { line: number; column: number };
end: { line: number; column: number };
};
children: TemplateNodes;
};
}
type TemplateNodes = TemplateNode[];
type Scheme = {
interface Scheme {
elements: string[];
};
}

const rule: TSESLint.RuleModule<'denyElement', [Scheme]> = {
meta: {
docs: {
description: 'This plugin disallows the use of certain HTML tags.',
recommended: 'stylistic',
url: '',
},
fixable: undefined,
Expand Down
1 change: 0 additions & 1 deletion src/rules/deny-import-from-ionic-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ const rule: TSESLint.RuleModule<'denyImportFromIonicModule', []> = {
docs: {
description:
'This plugin prevents accidental imports from @ionic/angular instead of @ionic/angular/standalone.',
recommended: 'stylistic',
url: '',
},
fixable: 'code',
Expand Down
1 change: 0 additions & 1 deletion src/rules/deny-soft-private-modifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ const rule: TSESLint.RuleModule<'denySoftPrivateModifier', []> = {
meta: {
docs: {
description: 'This plugin disallows the use of soft private modifier.',
recommended: 'stylistic',
url: '',
},
fixable: 'code',
Expand Down
1 change: 0 additions & 1 deletion src/rules/implements-ionic-lifecycle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const rule: TSESLint.RuleModule<'implementsIonicLifecycle', []> = {
meta: {
docs: {
description: 'This plugin recommend to implements Ionic Lifecycle.',
recommended: 'stylistic',
url: '',
},
fixable: 'code',
Expand Down
1 change: 0 additions & 1 deletion src/rules/import-inject-object.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ const rule: TSESLint.RuleModule<'importInjectObject', []> = {
docs: {
description:
'This plugin automatically imports when inject is used but not imported.',
recommended: 'stylistic',
url: '',
},
fixable: 'code',
Expand Down
1 change: 0 additions & 1 deletion src/rules/signal-use-as-signal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const rule: TSESLint.RuleModule<'signalUseAsSignal', []> = {
meta: {
docs: {
description: 'This plugin check to valid signal use as signal.',
recommended: 'strict',
url: '',
},
fixable: undefined,
Expand Down
Loading

0 comments on commit 80137ca

Please sign in to comment.