* feat(linter): convert-tslint-to-eslint generators * fix(core): remove generators in collection for ng and nest * fix(core): update tao to support mixed generators and schematics * fix(core): update tao to support mixed generators and schematics * fix(core): address some PR feedback * fix(core): fix snapshots after syncing up with master * feat(core): store user preference for removeTSLintIfNoMoreTSLintTargets * fix(linter): unit tests * feat(core): apply root tslint.json conversion to root .eslintrc.json
325 lines
11 KiB
TypeScript
325 lines
11 KiB
TypeScript
// Based on latest Angular project root tslint.json + enforce-module-boundaries config from nx-examples
|
|
export const exampleRootTslintJson = {
|
|
raw: {
|
|
rulesDirectory: [
|
|
'node_modules/@nrwl/workspace/src/tslint',
|
|
'node_modules/codelyzer',
|
|
],
|
|
linterOptions: {
|
|
exclude: ['**/*'],
|
|
},
|
|
rules: {
|
|
'arrow-return-shorthand': true,
|
|
'callable-types': true,
|
|
'class-name': true,
|
|
deprecation: {
|
|
severity: 'warn',
|
|
},
|
|
forin: true,
|
|
'import-blacklist': [true, 'rxjs/Rx'],
|
|
'interface-over-type-literal': true,
|
|
'member-access': false,
|
|
'member-ordering': [
|
|
true,
|
|
{
|
|
order: [
|
|
'static-field',
|
|
'instance-field',
|
|
'static-method',
|
|
'instance-method',
|
|
],
|
|
},
|
|
],
|
|
'no-arg': true,
|
|
'no-bitwise': true,
|
|
'no-console': [true, 'debug', 'info', 'time', 'timeEnd', 'trace'],
|
|
'no-construct': true,
|
|
'no-debugger': true,
|
|
'no-duplicate-super': true,
|
|
'no-empty': false,
|
|
'no-empty-interface': true,
|
|
'no-eval': true,
|
|
'no-inferrable-types': [true, 'ignore-params'],
|
|
'no-misused-new': true,
|
|
'no-non-null-assertion': true,
|
|
'no-shadowed-variable': true,
|
|
'no-string-literal': false,
|
|
'no-string-throw': true,
|
|
'no-switch-case-fall-through': true,
|
|
'no-unnecessary-initializer': true,
|
|
'no-unused-expression': true,
|
|
'no-var-keyword': true,
|
|
'object-literal-sort-keys': false,
|
|
'prefer-const': true,
|
|
radix: true,
|
|
'triple-equals': [true, 'allow-null-check'],
|
|
'unified-signatures': true,
|
|
'variable-name': false,
|
|
'nx-enforce-module-boundaries': [
|
|
true,
|
|
{
|
|
allow: ['@nx-example/shared/product/data/testing'],
|
|
depConstraints: [
|
|
{
|
|
sourceTag: 'type:app',
|
|
onlyDependOnLibsWithTags: ['type:feature', 'type:ui'],
|
|
},
|
|
{
|
|
sourceTag: 'type:feature',
|
|
onlyDependOnLibsWithTags: [
|
|
'type:ui',
|
|
'type:data',
|
|
'type:types',
|
|
'type:state',
|
|
],
|
|
},
|
|
{
|
|
sourceTag: 'type:types',
|
|
onlyDependOnLibsWithTags: ['type:types'],
|
|
},
|
|
{
|
|
sourceTag: 'type:state',
|
|
onlyDependOnLibsWithTags: [
|
|
'type:state',
|
|
'type:types',
|
|
'type:data',
|
|
],
|
|
},
|
|
{
|
|
sourceTag: 'type:data',
|
|
onlyDependOnLibsWithTags: ['type:types'],
|
|
},
|
|
{
|
|
sourceTag: 'type:e2e',
|
|
onlyDependOnLibsWithTags: ['type:e2e-utils'],
|
|
},
|
|
{
|
|
sourceTag: 'type:ui',
|
|
onlyDependOnLibsWithTags: ['type:types', 'type:ui'],
|
|
},
|
|
{
|
|
sourceTag: 'scope:products',
|
|
onlyDependOnLibsWithTags: ['scope:products', 'scope:shared'],
|
|
},
|
|
{
|
|
sourceTag: 'scope:cart',
|
|
onlyDependOnLibsWithTags: ['scope:cart', 'scope:shared'],
|
|
},
|
|
],
|
|
enforceBuildableLibDependency: true,
|
|
},
|
|
],
|
|
'directive-selector': [true, 'attribute', 'app', 'camelCase'],
|
|
'component-selector': [true, 'element', 'app', 'kebab-case'],
|
|
'no-conflicting-lifecycle': true,
|
|
'no-host-metadata-property': true,
|
|
'no-input-rename': true,
|
|
'no-inputs-metadata-property': true,
|
|
'no-output-native': true,
|
|
'no-output-on-prefix': true,
|
|
'no-output-rename': true,
|
|
'no-outputs-metadata-property': true,
|
|
'template-banana-in-box': true,
|
|
'template-no-negated-async': true,
|
|
'use-lifecycle-interface': true,
|
|
'use-pipe-transform-interface': true,
|
|
},
|
|
},
|
|
tslintPrintConfigResult: {
|
|
rules: {
|
|
'arrow-return-shorthand': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'callable-types': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'class-name': { ruleArguments: [], ruleSeverity: 'error' },
|
|
deprecation: { ruleSeverity: 'warning' },
|
|
forin: { ruleArguments: [], ruleSeverity: 'error' },
|
|
'import-blacklist': { ruleArguments: ['rxjs/Rx'], ruleSeverity: 'error' },
|
|
'interface-over-type-literal': {
|
|
ruleArguments: [],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'member-access': { ruleArguments: [], ruleSeverity: 'off' },
|
|
'member-ordering': {
|
|
ruleArguments: [
|
|
{
|
|
order: [
|
|
'static-field',
|
|
'instance-field',
|
|
'static-method',
|
|
'instance-method',
|
|
],
|
|
},
|
|
],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'no-arg': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-bitwise': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-console': {
|
|
ruleArguments: ['debug', 'info', 'time', 'timeEnd', 'trace'],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'no-construct': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-debugger': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-duplicate-super': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-empty': { ruleArguments: [], ruleSeverity: 'off' },
|
|
'no-empty-interface': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-eval': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-inferrable-types': {
|
|
ruleArguments: ['ignore-params'],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'no-misused-new': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-non-null-assertion': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-shadowed-variable': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-string-literal': { ruleArguments: [], ruleSeverity: 'off' },
|
|
'no-string-throw': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-switch-case-fall-through': {
|
|
ruleArguments: [],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'no-unnecessary-initializer': {
|
|
ruleArguments: [],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'no-unused-expression': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-var-keyword': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'object-literal-sort-keys': { ruleArguments: [], ruleSeverity: 'off' },
|
|
'prefer-const': { ruleArguments: [], ruleSeverity: 'error' },
|
|
radix: { ruleArguments: [], ruleSeverity: 'error' },
|
|
'triple-equals': {
|
|
ruleArguments: ['allow-null-check'],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'unified-signatures': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'variable-name': { ruleArguments: [], ruleSeverity: 'off' },
|
|
'nx-enforce-module-boundaries': {
|
|
ruleArguments: [
|
|
{
|
|
allow: ['@nx-example/shared/product/data/testing'],
|
|
depConstraints: [
|
|
{
|
|
sourceTag: 'type:app',
|
|
onlyDependOnLibsWithTags: ['type:feature', 'type:ui'],
|
|
},
|
|
{
|
|
sourceTag: 'type:feature',
|
|
onlyDependOnLibsWithTags: [
|
|
'type:ui',
|
|
'type:data',
|
|
'type:types',
|
|
'type:state',
|
|
],
|
|
},
|
|
{
|
|
sourceTag: 'type:types',
|
|
onlyDependOnLibsWithTags: ['type:types'],
|
|
},
|
|
{
|
|
sourceTag: 'type:state',
|
|
onlyDependOnLibsWithTags: [
|
|
'type:state',
|
|
'type:types',
|
|
'type:data',
|
|
],
|
|
},
|
|
{
|
|
sourceTag: 'type:data',
|
|
onlyDependOnLibsWithTags: ['type:types'],
|
|
},
|
|
{
|
|
sourceTag: 'type:e2e',
|
|
onlyDependOnLibsWithTags: ['type:e2e-utils'],
|
|
},
|
|
{
|
|
sourceTag: 'type:ui',
|
|
onlyDependOnLibsWithTags: ['type:types', 'type:ui'],
|
|
},
|
|
{
|
|
sourceTag: 'scope:products',
|
|
onlyDependOnLibsWithTags: ['scope:products', 'scope:shared'],
|
|
},
|
|
{
|
|
sourceTag: 'scope:cart',
|
|
onlyDependOnLibsWithTags: ['scope:cart', 'scope:shared'],
|
|
},
|
|
],
|
|
enforceBuildableLibDependency: true,
|
|
},
|
|
],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'directive-selector': {
|
|
ruleArguments: ['attribute', 'app', 'camelCase'],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'component-selector': {
|
|
ruleArguments: ['element', 'app', 'kebab-case'],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'no-conflicting-lifecycle': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-host-metadata-property': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-input-rename': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-inputs-metadata-property': {
|
|
ruleArguments: [],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'no-output-native': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-output-on-prefix': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-output-rename': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'no-outputs-metadata-property': {
|
|
ruleArguments: [],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'template-banana-in-box': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'template-no-negated-async': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'use-lifecycle-interface': { ruleArguments: [], ruleSeverity: 'error' },
|
|
'use-pipe-transform-interface': {
|
|
ruleArguments: [],
|
|
ruleSeverity: 'error',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
export const exampleAngularProjectTslintJson = {
|
|
raw: {
|
|
extends: '../../tslint.json',
|
|
rules: {
|
|
'directive-selector': [true, 'attribute', 'angular-app', 'camelCase'],
|
|
'component-selector': [true, 'element', 'angular-app', 'kebab-case'],
|
|
},
|
|
linterOptions: {
|
|
exclude: ['!**/*'],
|
|
},
|
|
},
|
|
tslintPrintConfigResult: {
|
|
rules: {
|
|
'directive-selector': {
|
|
ruleArguments: ['attribute', 'angular-app', 'camelCase'],
|
|
ruleSeverity: 'error',
|
|
},
|
|
'component-selector': {
|
|
ruleArguments: ['element', 'angular-app', 'kebab-case'],
|
|
ruleSeverity: 'error',
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
export const exampleNonAngularProjectTslintJson = {
|
|
raw: {
|
|
extends: '../../tslint.json',
|
|
linterOptions: { exclude: ['!**/*'] },
|
|
rules: {},
|
|
},
|
|
tslintPrintConfigResult: { rules: {} },
|
|
};
|
|
|
|
export const exampleE2eProjectTslintJson = {
|
|
raw: {
|
|
extends: '../../tslint.json',
|
|
linterOptions: { exclude: ['!**/*'] },
|
|
rules: {},
|
|
},
|
|
tslintPrintConfigResult: { rules: {} },
|
|
};
|