@@ -20,7 +20,7 @@ Copyright (c) OWASP Foundation. All Rights Reserved.
2020import path from 'node:path'
2121import { fileURLToPath } from 'node:url'
2222
23- import plugin_js from '@eslint/js'
23+ /* eslint-disable camelcase -- readability */
2424import config_love from 'eslint-config-love'
2525import plugin_import from 'eslint-plugin-import'
2626import plugin_jsdoc from 'eslint-plugin-jsdoc'
@@ -29,36 +29,52 @@ import plugin_n from 'eslint-plugin-n'
2929import plugin_simpleImportSort from 'eslint-plugin-simple-import-sort'
3030import plugin_tsdoc from 'eslint-plugin-tsdoc'
3131import globals from 'globals'
32+ import config_neostandard from 'neostandard'
3233
3334const __filename = fileURLToPath ( import . meta. url )
3435const __dirname = path . dirname ( __filename )
3536const projectRoot = path . dirname ( path . dirname ( __dirname ) )
3637
37-
3838const licenseHeaderFile = path . join ( projectRoot , '.license-header.js' )
3939
40- /* eslint-disable jsdoc/valid-types */
40+ /* eslint-disable jsdoc/valid-types -- type-import not supported yet */
4141
4242/**
43- * @type {import('eslint').Linter.Config[] }
44- * @see https://eslint.org
43+ * @typedef {import('eslint').Linter.Config } Config
44+ */
45+
46+ /**
47+ * @param {Array<string> } files
48+ * @param {Config[] } cs
49+ * @return {Config[] }
50+ */
51+ function configSetFiles ( files , cs ) {
52+ for ( const c of cs ) {
53+ c . files = files
54+ }
55+ return cs
56+ }
57+
58+ /**
59+ * @type {Config[] }
60+ * @see https://eslint.org/
4561 */
4662export default [
4763 {
4864 name : 'general' ,
4965 plugins : {
50- ' import' : plugin_import ,
66+ import : plugin_import ,
5167 'simple-import-sort' : plugin_simpleImportSort ,
5268 'license-header' : plugin_header ,
53- 'n' : plugin_n ,
69+ n : plugin_n ,
5470 } ,
5571 rules : {
5672 'n/prefer-node-protocol' : 'error' ,
5773 'sort-imports' : 'off' ,
5874 'import/order' : [
5975 // https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md
6076 'error' , {
61- ' groups' : [
77+ groups : [
6278 'builtin' ,
6379 'external' ,
6480 /* and then all the rest */
@@ -73,103 +89,101 @@ export default [
7389 'license-header/header' : [ 'error' , licenseHeaderFile ] ,
7490 } ,
7591 } ,
92+ ...configSetFiles ( [ '**/*.{js,mjs,cjs}' ] , [
93+ ...config_neostandard ( { noJsx : true , ts : false } ) ,
94+ {
95+ ...plugin_jsdoc . configs [ 'flat/recommended' ] ,
96+ } ,
97+ {
98+ name : 'jsdoc-override' ,
99+ plugins : {
100+ jsdoc : plugin_jsdoc ,
101+ } ,
102+ settings : {
103+ jsdoc : {
104+ mode : 'jsdoc' ,
105+ } ,
106+ } ,
107+ rules : {
108+ 'jsdoc/no-undefined-types' : 'error' ,
109+ 'jsdoc/check-tag-names' : 0 ,
110+ 'jsdoc/check-types' : 'error' ,
111+ 'jsdoc/require-hyphen-before-param-description' : [ 'error' , 'always' ] ,
112+ 'jsdoc/require-jsdoc' : 0 ,
113+ 'jsdoc/require-param' : 0 ,
114+ 'jsdoc/require-param-description' : 0 ,
115+ 'jsdoc/require-param-name' : 'error' ,
116+ 'jsdoc/require-param-type' : 'error' ,
117+ 'jsdoc/require-property' : 0 ,
118+ 'jsdoc/require-property-description' : 0 ,
119+ 'jsdoc/require-property-name' : 'error' ,
120+ 'jsdoc/require-property-type' : 'error' ,
121+ 'jsdoc/require-returns' : 0 ,
122+ 'jsdoc/require-returns-check' : 'error' ,
123+ 'jsdoc/require-returns-description' : 0 ,
124+ 'jsdoc/require-returns-type' : 'error' ,
125+ 'jsdoc/require-throws' : 'error' ,
126+ 'jsdoc/require-yields' : 0 ,
127+ 'jsdoc/require-yields-check' : 'error' ,
128+ 'jsdoc/sort-tags' : 'warn' ,
129+ }
130+ } ,
131+ ] ) ,
76132 {
77133 files : [ '**/*.{js,cjs}' ] ,
78134 rules : {
79135 'simple-import-sort/imports' : 'off' ,
80136 'import/order' : [
81137 // https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md
82138 'error' , {
83- ' groups' : [
139+ groups : [
84140 'builtin' ,
85141 'external' ,
86142 /* and then all the rest */
87143 ] ,
88- ' alphabetize' : { order : " asc" } ,
89- ' named' : true ,
144+ alphabetize : { order : ' asc' } ,
145+ named : true ,
90146 'newlines-between' : 'always' ,
91147 } ] ,
92148 }
93149 } ,
94- {
95- files : [ '**/*.{js,mjs,cjs}' ] ,
96- rules : plugin_js . configs . recommended . rules ,
97- } ,
98- {
99- ...plugin_jsdoc . configs [ 'flat/recommended' ] ,
100- files : [ '**/*.{js,mjs,cjs}' ] ,
101- } ,
102- {
103- name : 'jsdoc-override' ,
104- files : [ '**/*.{js,mjs,cjs}' ] ,
105- plugins : {
106- 'jsdoc' : plugin_jsdoc ,
150+ ...configSetFiles ( [ '**/*.ts' ] , [
151+ {
152+ ...config_love ,
107153 } ,
108- settings : {
109- jsdoc : {
110- mode : 'jsdoc' ,
154+ {
155+ plugins : {
156+ tsdoc : plugin_tsdoc ,
111157 } ,
112- } ,
113- rules : {
114- 'jsdoc/no-undefined-types' : 'error' ,
115- 'jsdoc/check-tag-names' : 0 ,
116- 'jsdoc/check-types' : 'error' ,
117- 'jsdoc/require-hyphen-before-param-description' : [ 'error' , 'always' ] ,
118- 'jsdoc/require-jsdoc' : 0 ,
119- 'jsdoc/require-param' : 0 ,
120- 'jsdoc/require-param-description' : 0 ,
121- 'jsdoc/require-param-name' : 'error' ,
122- 'jsdoc/require-param-type' : 'error' ,
123- 'jsdoc/require-property' : 0 ,
124- 'jsdoc/require-property-description' : 0 ,
125- 'jsdoc/require-property-name' : 'error' ,
126- 'jsdoc/require-property-type' : 'error' ,
127- 'jsdoc/require-returns' : 0 ,
128- 'jsdoc/require-returns-check' : 'error' ,
129- 'jsdoc/require-returns-description' : 0 ,
130- 'jsdoc/require-returns-type' : 'error' ,
131- 'jsdoc/require-throws' : 'error' ,
132- 'jsdoc/require-yields' : 0 ,
133- 'jsdoc/require-yields-check' : 'error' ,
134- 'jsdoc/sort-tags' : 'warn' ,
135- }
136- } ,
137- {
138- ...config_love ,
139- files : [ '**/*.ts' ]
140- } ,
141- {
142- files : [ '**/*.ts' ] ,
143- plugins : {
144- 'tsdoc' : plugin_tsdoc ,
145- } ,
146- languageOptions : {
147- parserOptions : {
148- // override
149- project : false ,
158+ languageOptions : {
159+ parserOptions : {
160+ // override
161+ project : false ,
162+ } ,
163+ } ,
164+ rules : {
165+ '@typescript-eslint/consistent-type-imports' : [ 'error' , {
166+ fixStyle : 'separate-type-imports' ,
167+ } ] ,
168+ '@typescript-eslint/unbound-method' : [ 'error' , {
169+ ignoreStatic : true ,
170+ } ] ,
171+ 'class-methods-use-this' : 'off' ,
172+ '@typescript-eslint/class-methods-use-this' : 'off' ,
173+ '@typescript-eslint/no-redundant-type-constituents' : 'off' ,
174+ '@typescript-eslint/no-magic-numbers' : 'off' ,
175+ '@typescript-eslint/no-explicit-any' : 'off' ,
176+ '@typescript-eslint/prefer-destructuring' : 'off' ,
177+ 'tsdoc/syntax' : 'error' ,
150178 } ,
151179 } ,
152- rules : {
153- '@typescript-eslint/consistent-type-imports' : [ 'error' , {
154- fixStyle : 'separate-type-imports' ,
155- } ] ,
156- '@typescript-eslint/unbound-method' : [ 'error' , {
157- ignoreStatic : true ,
158- } ] ,
159- 'class-methods-use-this' : 'off' ,
160- '@typescript-eslint/class-methods-use-this' : 'off' ,
161- '@typescript-eslint/no-redundant-type-constituents' : 'off' ,
162- '@typescript-eslint/no-magic-numbers' : 'off' ,
163- '@typescript-eslint/no-explicit-any' : 'off' ,
164- '@typescript-eslint/prefer-destructuring' : 'off' ,
165- 'tsdoc/syntax' : 'error' ,
166- } ,
167- } ,
180+ ] ) ,
168181 {
169182 files : [
170183 '**/eslint.config.{js,mjs,cjs}' ,
171184 '**/webpack.config.js' ,
172- '**/.mocharc.js'
185+ '**/.mocharc.js' ,
186+ '**/.jest.config.js'
173187 ] ,
174188 languageOptions : {
175189 globals : globals . node
0 commit comments