.eslintrc.json:
{
"root": true,
"ignorePatterns": ["projects/**/*"],
"overrides": [
{
"files": ["*.ts"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@angular-eslint/recommended",
"plugin:@angular-eslint/template/process-inline-templates",
"plugin:prettier/recommended"
],
"rules": {
"no-unused-vars": "error",
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/explicit-member-accessibility": "error",
"@angular-eslint/directive-selector": [
"error",
{
"type": "attribute",
"prefix": "app",
"style": "camelCase"
}
],
"@angular-eslint/component-selector": [
"error",
{
"type": "element",
"prefix": "app",
"style": "kebab-case"
}
]
}
},
{
"files": ["*.html"],
"extends": ["plugin:@angular-eslint/template/recommended"],
"rules": {}
},
{
"files": ["*.html"],
"excludedFiles": ["*inline-template-*.component.html"],
"extends": ["plugin:prettier/recommended"],
"rules": {
"prettier/prettier": ["error", { "parser": "angular" }]
}
}
]
}
угловая составляющая:
export class AppComponent {
public title = 'angular-movieseat';
public something = 'asd';
public somethingFn() {
console.info('something');
}
}
something
и somethingFn()
никогда не используются, но ESlint не помечает их как неиспользуемые. Во всех вопросах, которые я прочитал, это должно решить следующее:
"no-unused-vars": "error",
"@typescript-eslint/no-unused-vars": "error",
Но это не так, какие-либо предложения, как пометить эти переменные класса как неиспользуемые? ESLint работает, так как требует правила explicit-member-accessibility
.
Для завершения мой tsconfig.json
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"moduleResolution": "node",
"importHelpers": true,
"target": "ES2022",
"module": "ES2022",
"useDefineForClassFields": false,
"lib": ["ES2022", "dom"],
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
"strictInjectionParameters": true,
"strictInputAccessModifiers": true,
"strictTemplates": true
}
}
Angular немного отличается, потому что мы можем ссылаться на переменные и методы компонента внутри HTML-файла компонента, ESLint не может идентифицировать эти случаи, поэтому вы не получаете эту ошибку. Единственный способ сделать это — вручную проверить переменные и методы, сравнить их в файле HTML и TS и определить, используются ли они где-либо.
Примечание. Лучше всего выполнить глобальный поиск имени переменной, чтобы найти все варианты использования, чтобы выяснить это, вы также должны проверить родителя, если доступ к свойству осуществляется через ViewChild.
Трудно сказать без реальной ссылки на проект, но я предполагаю, что ваш .eslintrc.json должен быть таким (я добавляю только изменения)
"files": ["*.ts"],
"parserOptions": {
"project": ["tsconfig.json"],
"createDefaultProgram": true
},
"plugins": ["@typescript-eslint"],
Очевидно, ESLint «плохо работает» с Angular:
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
public title = 'angular-movieseat';
private something = 'asd';
private somethingFn(): void {
console.info('something');
const something = 'something';
}
}
Когда я объявляю const something
, я получаю ожидаемую ошибку неиспользуемой переменной. То же самое с импортом Input
в верхней части файла.
Я также получаю предупреждения для something
и somethingFn()
, когда объявляю их частными.
Думаю, это все. Если я делаю функцию
private
, я получаю сообщение об ошибке. Также, когда я импортирую функции, которые не используются. Так что это «просто» публичные члены и т. д.