nx/packages/linter/src/utils/convert-tslint-to-eslint/example-tslint-configs.ts
James Henry 00dec221e2
feat(linter): convert-tslint-to-eslint generators (#4943)
* 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
2021-03-19 13:41:13 -04:00

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: {} },
};