MOBILE-3303 lint: Migrate tslint to eslint
parent
617d4764e8
commit
e1c37437a2
|
@ -0,0 +1,216 @@
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: ['*.ts'],
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
es6: true,
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
extends: [
|
||||||
|
'eslint:recommended',
|
||||||
|
'plugin:@typescript-eslint/recommended',
|
||||||
|
'prettier',
|
||||||
|
'prettier/@typescript-eslint',
|
||||||
|
'plugin:jest/recommended',
|
||||||
|
'plugin:@angular-eslint/recommended',
|
||||||
|
],
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
|
parserOptions: {
|
||||||
|
project: 'tsconfig.json',
|
||||||
|
sourceType: 'module',
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
'eslint-plugin-prefer-arrow',
|
||||||
|
'eslint-plugin-jsdoc',
|
||||||
|
'@typescript-eslint',
|
||||||
|
'header',
|
||||||
|
'jest',
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
'@angular-eslint/component-class-suffix': ['error', { suffixes: ['Component', 'Page'] }],
|
||||||
|
'@typescript-eslint/adjacent-overload-signatures': 'error',
|
||||||
|
'@typescript-eslint/ban-types': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
types: {
|
||||||
|
Boolean: {
|
||||||
|
message: 'Use \'boolean\' instead.',
|
||||||
|
},
|
||||||
|
Number: {
|
||||||
|
message: 'Use \'number\' instead.',
|
||||||
|
},
|
||||||
|
String: {
|
||||||
|
message: 'Use \'string\' instead.',
|
||||||
|
},
|
||||||
|
Object: {
|
||||||
|
message: 'Use {} instead.',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'@typescript-eslint/explicit-member-accessibility': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
accessibility: 'no-public',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'@typescript-eslint/indent': 'error',
|
||||||
|
'@typescript-eslint/member-delimiter-style': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
multiline: {
|
||||||
|
delimiter: 'semi',
|
||||||
|
requireLast: true,
|
||||||
|
},
|
||||||
|
singleline: {
|
||||||
|
delimiter: 'semi',
|
||||||
|
requireLast: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'@typescript-eslint/member-ordering': 'error',
|
||||||
|
'@typescript-eslint/naming-convention': 'error',
|
||||||
|
'@typescript-eslint/no-empty-function': 'error',
|
||||||
|
'@typescript-eslint/no-empty-interface': 'error',
|
||||||
|
'@typescript-eslint/no-inferrable-types': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
ignoreParameters: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'@typescript-eslint/no-non-null-assertion': 'error',
|
||||||
|
'@typescript-eslint/no-this-alias': 'error',
|
||||||
|
'@typescript-eslint/no-unused-vars': 'error',
|
||||||
|
'@typescript-eslint/quotes': [
|
||||||
|
'error',
|
||||||
|
'single',
|
||||||
|
],
|
||||||
|
'@typescript-eslint/semi': [
|
||||||
|
'error',
|
||||||
|
'always',
|
||||||
|
],
|
||||||
|
'@typescript-eslint/type-annotation-spacing': 'error',
|
||||||
|
'@typescript-eslint/unified-signatures': 'error',
|
||||||
|
'header/header': [
|
||||||
|
2,
|
||||||
|
'line',
|
||||||
|
[
|
||||||
|
' (C) Copyright 2015 Moodle Pty Ltd.',
|
||||||
|
'',
|
||||||
|
' Licensed under the Apache License, Version 2.0 (the "License");',
|
||||||
|
' you may not use this file except in compliance with the License.',
|
||||||
|
' You may obtain a copy of the License at',
|
||||||
|
'',
|
||||||
|
' http://www.apache.org/licenses/LICENSE-2.0',
|
||||||
|
'',
|
||||||
|
' Unless required by applicable law or agreed to in writing, software',
|
||||||
|
' distributed under the License is distributed on an "AS IS" BASIS,',
|
||||||
|
' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.',
|
||||||
|
' See the License for the specific language governing permissions and',
|
||||||
|
' limitations under the License.',
|
||||||
|
],
|
||||||
|
1,
|
||||||
|
],
|
||||||
|
'one-var': ['error', 'never'],
|
||||||
|
'comma-dangle': ['error', 'always-multiline'],
|
||||||
|
'capitalized-comments': [
|
||||||
|
'error',
|
||||||
|
'always',
|
||||||
|
{
|
||||||
|
ignoreConsecutiveComments: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'constructor-super': 'error',
|
||||||
|
'curly': 'error',
|
||||||
|
'default-case': 'error',
|
||||||
|
'eol-last': 'error',
|
||||||
|
'id-blacklist': [
|
||||||
|
'error',
|
||||||
|
'any',
|
||||||
|
'Number',
|
||||||
|
'number',
|
||||||
|
'String',
|
||||||
|
'string',
|
||||||
|
'Boolean',
|
||||||
|
'boolean',
|
||||||
|
'Undefined',
|
||||||
|
'undefined',
|
||||||
|
],
|
||||||
|
'id-match': 'error',
|
||||||
|
'jsdoc/check-alignment': 'error',
|
||||||
|
'jsdoc/check-indentation': 'error',
|
||||||
|
'jsdoc/newline-after-description': 'error',
|
||||||
|
'linebreak-style': [
|
||||||
|
'error',
|
||||||
|
'unix',
|
||||||
|
],
|
||||||
|
'max-len': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
code: 132,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'new-parens': 'error',
|
||||||
|
'no-bitwise': 'error',
|
||||||
|
'no-cond-assign': 'error',
|
||||||
|
'no-console': 'error',
|
||||||
|
'no-debugger': 'error',
|
||||||
|
'no-duplicate-case': 'error',
|
||||||
|
'no-duplicate-imports': 'error',
|
||||||
|
'no-empty': 'error',
|
||||||
|
'no-eval': 'error',
|
||||||
|
'no-invalid-this': 'error',
|
||||||
|
'no-irregular-whitespace': 'error',
|
||||||
|
'no-multiple-empty-lines': 'error',
|
||||||
|
'no-new-wrappers': 'error',
|
||||||
|
'no-redeclare': 'error',
|
||||||
|
'no-sequences': 'error',
|
||||||
|
'no-trailing-spaces': 'error',
|
||||||
|
'no-underscore-dangle': 'error',
|
||||||
|
'no-unused-labels': 'error',
|
||||||
|
'no-var': 'error',
|
||||||
|
'padding-line-between-statements': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
blankLine: 'always',
|
||||||
|
prev: '*',
|
||||||
|
next: 'return',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'prefer-arrow/prefer-arrow-functions': [
|
||||||
|
'error',
|
||||||
|
{ allowStandaloneDeclarations: true },
|
||||||
|
],
|
||||||
|
'prefer-const': 'error',
|
||||||
|
'quote-props': [
|
||||||
|
'error',
|
||||||
|
'consistent-as-needed',
|
||||||
|
],
|
||||||
|
'spaced-comment': [
|
||||||
|
'error',
|
||||||
|
'always',
|
||||||
|
{
|
||||||
|
markers: [
|
||||||
|
'/',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'use-isnan': 'error',
|
||||||
|
'yoda': 'error',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
files: ['*.html'],
|
||||||
|
extends: ['plugin:@angular-eslint/template/recommended'],
|
||||||
|
rules: {
|
||||||
|
'max-len': ['error', { code: 140 }],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
files: ['*.component.ts'],
|
||||||
|
extends: ['plugin:@angular-eslint/template/process-inline-templates'],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
|
@ -2,4 +2,5 @@ language: node_js
|
||||||
node_js: 12
|
node_js: 12
|
||||||
cache: npm
|
cache: npm
|
||||||
script:
|
script:
|
||||||
|
- npm run lint
|
||||||
- npm run test:ci
|
- npm run test:ci
|
||||||
|
|
12
angular.json
12
angular.json
|
@ -95,14 +95,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lint": {
|
"lint": {
|
||||||
"builder": "@angular-devkit/build-angular:tslint",
|
"builder": "@angular-eslint/builder:lint",
|
||||||
"options": {
|
"options": {
|
||||||
"tsConfig": [
|
"lintFilePatterns": [
|
||||||
"tsconfig.app.json",
|
"src/**/*.ts",
|
||||||
"tsconfig.spec.json",
|
"src/app/**/*.html"
|
||||||
"e2e/tsconfig.json"
|
]
|
||||||
],
|
|
||||||
"exclude": ["**/node_modules/**"]
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ionic-cordova-build": {
|
"ionic-cordova-build": {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
15
package.json
15
package.json
|
@ -109,6 +109,11 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular-builders/custom-webpack": "^10.0.1",
|
"@angular-builders/custom-webpack": "^10.0.1",
|
||||||
"@angular-devkit/build-angular": "~0.1000.0",
|
"@angular-devkit/build-angular": "~0.1000.0",
|
||||||
|
"@angular-eslint/builder": "0.5.0-beta.2",
|
||||||
|
"@angular-eslint/eslint-plugin": "0.5.0-beta.2",
|
||||||
|
"@angular-eslint/eslint-plugin-template": "0.5.0-beta.2",
|
||||||
|
"@angular-eslint/schematics": "^0.5.0-beta.2",
|
||||||
|
"@angular-eslint/template-parser": "0.5.0-beta.2",
|
||||||
"@angular/cli": "~10.0.5",
|
"@angular/cli": "~10.0.5",
|
||||||
"@angular/compiler": "~10.0.0",
|
"@angular/compiler": "~10.0.0",
|
||||||
"@angular/compiler-cli": "~10.0.0",
|
"@angular/compiler-cli": "~10.0.0",
|
||||||
|
@ -116,11 +121,19 @@
|
||||||
"@ionic/angular-toolkit": "^2.3.0",
|
"@ionic/angular-toolkit": "^2.3.0",
|
||||||
"@types/node": "^12.12.64",
|
"@types/node": "^12.12.64",
|
||||||
"codelyzer": "^6.0.0",
|
"codelyzer": "^6.0.0",
|
||||||
|
"@typescript-eslint/eslint-plugin": "4.3.0",
|
||||||
|
"@typescript-eslint/parser": "4.3.0",
|
||||||
|
"eslint": "^7.6.0",
|
||||||
|
"eslint-config-prettier": "^6.12.0",
|
||||||
|
"eslint-plugin-header": "^3.1.0",
|
||||||
|
"eslint-plugin-import": "^2.22.1",
|
||||||
|
"eslint-plugin-jest": "^24.1.0",
|
||||||
|
"eslint-plugin-jsdoc": "^30.6.3",
|
||||||
|
"eslint-plugin-prefer-arrow": "^1.2.2",
|
||||||
"jest": "^26.5.0",
|
"jest": "^26.5.0",
|
||||||
"jest-preset-angular": "^8.3.1",
|
"jest-preset-angular": "^8.3.1",
|
||||||
"ts-jest": "^26.4.1",
|
"ts-jest": "^26.4.1",
|
||||||
"ts-node": "~8.3.0",
|
"ts-node": "~8.3.0",
|
||||||
"tslint": "~6.1.0",
|
|
||||||
"typescript": "~3.9.5"
|
"typescript": "~3.9.5"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|
|
@ -17,8 +17,6 @@ import { Component } from '@angular/core';
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
templateUrl: 'app.component.html',
|
templateUrl: 'app.component.html',
|
||||||
styleUrls: ['app.component.scss']
|
styleUrls: ['app.component.scss'],
|
||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent { }
|
||||||
constructor() { }
|
|
||||||
}
|
|
||||||
|
|
|
@ -96,9 +96,7 @@ import { setSingletonsInjector } from '@singletons/core.singletons';
|
||||||
bootstrap: [AppComponent],
|
bootstrap: [AppComponent],
|
||||||
})
|
})
|
||||||
export class AppModule {
|
export class AppModule {
|
||||||
constructor(injector: Injector,
|
constructor(injector: Injector, platform: Platform) {
|
||||||
platform: Platform,
|
|
||||||
) {
|
|
||||||
|
|
||||||
// Set the injector.
|
// Set the injector.
|
||||||
setSingletonsInjector(injector);
|
setSingletonsInjector(injector);
|
||||||
|
|
|
@ -22,5 +22,9 @@ if (environment.production) {
|
||||||
enableProdMode();
|
enableProdMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
platformBrowserDynamic().bootstrapModule(AppModule)
|
platformBrowserDynamic()
|
||||||
.catch(err => console.log(err));
|
.bootstrapModule(AppModule)
|
||||||
|
.catch(err => {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
|
|
|
@ -13,68 +13,11 @@
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file includes polyfills needed by Angular and is loaded before the app.
|
|
||||||
* You can add your own extra polyfills to this file.
|
|
||||||
*
|
|
||||||
* This file is divided into 2 sections:
|
|
||||||
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
|
|
||||||
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
|
|
||||||
* file.
|
|
||||||
*
|
|
||||||
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
|
|
||||||
* automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
|
|
||||||
* Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
|
|
||||||
*
|
|
||||||
* Learn more in https://angular.io/guide/browser-support
|
|
||||||
*/
|
|
||||||
|
|
||||||
/***************************************************************************************************
|
|
||||||
* BROWSER POLYFILLS
|
* BROWSER POLYFILLS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
|
|
||||||
// import 'classlist.js'; // Run `npm install --save classlist.js`.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Web Animations `@angular/platform-browser/animations`
|
|
||||||
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
|
|
||||||
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
|
|
||||||
*/
|
|
||||||
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* By default, zone.js will patch all possible macroTask and DomEvents
|
|
||||||
* user can disable parts of macroTask/DomEvents patch by setting following flags
|
|
||||||
* because those flags need to be set before `zone.js` being loaded, and webpack
|
|
||||||
* will put import in the top of bundle, so user need to create a separate file
|
|
||||||
* in this directory (for example: zone-flags.ts), and put the following flags
|
|
||||||
* into that file, and then add the following code before importing zone.js.
|
|
||||||
* import './zone-flags.ts';
|
|
||||||
*
|
|
||||||
* The flags allowed in zone-flags.ts are listed here.
|
|
||||||
*
|
|
||||||
* The following flags will work for all browsers.
|
|
||||||
*
|
|
||||||
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
|
|
||||||
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
|
|
||||||
* (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
|
|
||||||
*
|
|
||||||
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
|
|
||||||
* with the following flag, it will bypass `zone.js` patch for IE/Edge
|
|
||||||
*
|
|
||||||
* (window as any).__Zone_enable_cross_context_check = true;
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
import './zone-flags';
|
import './zone-flags';
|
||||||
|
|
||||||
/***************************************************************************************************
|
/**
|
||||||
* Zone JS is required by default for Angular itself.
|
* Zone JS is required by default for Angular itself.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************************************
|
|
||||||
* APPLICATION IMPORTS
|
|
||||||
*/
|
|
||||||
|
|
|
@ -1 +1,15 @@
|
||||||
|
// (C) Copyright 2015 Moodle Pty Ltd.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
import 'jest-preset-angular';
|
import 'jest-preset-angular';
|
||||||
|
|
|
@ -14,8 +14,9 @@
|
||||||
|
|
||||||
import { CUSTOM_ELEMENTS_SCHEMA, Type } from '@angular/core';
|
import { CUSTOM_ELEMENTS_SCHEMA, Type } from '@angular/core';
|
||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
import { Component } from '@angular/compiler/src/core';
|
||||||
|
|
||||||
export async function prepareComponentTest(component: any): Promise<void> {
|
export async function prepareComponentTest(component: Type<Component>): Promise<void> {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
declarations: [component],
|
declarations: [component],
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
// (C) Copyright 2015 Moodle Pty Ltd.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
import '';
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
|
||||||
|
interface Window {
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||||
|
__Zone_disable_customElements: boolean;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -16,4 +16,6 @@
|
||||||
* Prevents Angular change detection from
|
* Prevents Angular change detection from
|
||||||
* running with certain Web Component callbacks
|
* running with certain Web Component callbacks
|
||||||
*/
|
*/
|
||||||
(window as any).__Zone_disable_customElements = true;
|
|
||||||
|
// eslint-disable-next-line no-underscore-dangle
|
||||||
|
window.__Zone_disable_customElements = true;
|
||||||
|
|
Loading…
Reference in New Issue