isml-linter 5.39.1 → 5.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1177 -1142
- package/LICENSE +21 -21
- package/README.md +245 -245
- package/bin/isml-linter.js +32 -32
- package/ismllinter.config.js +33 -33
- package/package.json +53 -53
- package/scaffold_files/ismllinter.config.js +47 -47
- package/src/Builder.js +15 -15
- package/src/Constants.js +139 -139
- package/src/IsmlLinter.js +255 -255
- package/src/enums/ParseStatus.js +5 -5
- package/src/enums/SfccTagContainer.js +287 -287
- package/src/isml_tree/ContainerNode.js +38 -38
- package/src/isml_tree/IsmlNode.js +692 -658
- package/src/isml_tree/MaskUtils.js +421 -419
- package/src/isml_tree/ParseUtils.js +515 -434
- package/src/isml_tree/TreeBuilder.js +273 -271
- package/src/publicApi.js +24 -24
- package/src/rules/line_by_line/enforce-isprint.js +53 -53
- package/src/rules/line_by_line/enforce-require.js +35 -35
- package/src/rules/line_by_line/lowercase-filename.js +29 -29
- package/src/rules/line_by_line/max-lines.js +37 -37
- package/src/rules/line_by_line/no-br.js +36 -36
- package/src/rules/line_by_line/no-git-conflict.js +43 -43
- package/src/rules/line_by_line/no-import-package.js +34 -34
- package/src/rules/line_by_line/no-inline-style.js +34 -34
- package/src/rules/line_by_line/no-isscript.js +34 -34
- package/src/rules/line_by_line/no-space-only-lines.js +47 -47
- package/src/rules/line_by_line/no-tabs.js +38 -38
- package/src/rules/line_by_line/no-trailing-spaces.js +52 -52
- package/src/rules/prototypes/RulePrototype.js +79 -79
- package/src/rules/prototypes/SingleLineRulePrototype.js +47 -47
- package/src/rules/prototypes/TreeRulePrototype.js +84 -84
- package/src/rules/tree/align-isset.js +87 -87
- package/src/rules/tree/contextual-attrs.js +105 -105
- package/src/rules/tree/custom-tags.js +54 -54
- package/src/rules/tree/disallow-tags.js +39 -39
- package/src/rules/tree/empty-eof.js +66 -66
- package/src/rules/tree/enforce-security.js +85 -85
- package/src/rules/tree/eslint-to-isscript.js +179 -179
- package/src/rules/tree/indent.js +856 -853
- package/src/rules/tree/leading-iscache.js +39 -43
- package/src/rules/tree/leading-iscontent.js +35 -39
- package/src/rules/tree/max-depth.js +54 -54
- package/src/rules/tree/no-deprecated-attrs.js +67 -67
- package/src/rules/tree/no-embedded-isml.js +17 -17
- package/src/rules/tree/no-hardcode.js +51 -51
- package/src/rules/tree/no-iselse-slash.js +35 -35
- package/src/rules/tree/no-redundant-context.js +134 -134
- package/src/rules/tree/no-require-in-loop.js +63 -63
- package/src/rules/tree/one-element-per-line.js +82 -76
- package/src/util/CommandLineUtils.js +19 -19
- package/src/util/ConfigUtils.js +219 -219
- package/src/util/ConsoleUtils.js +327 -327
- package/src/util/CustomTagContainer.js +45 -45
- package/src/util/ExceptionUtils.js +149 -136
- package/src/util/FileUtils.js +79 -79
- package/src/util/GeneralUtils.js +60 -60
- package/src/util/NativeExtensionUtils.js +6 -6
- package/src/util/RuleUtils.js +295 -295
- package/src/util/TempRuleUtils.js +232 -232
package/ismllinter.config.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
// Please check all available configurations and rules
|
|
2
|
-
// at https://www.npmjs.com/package/isml-linter.
|
|
3
|
-
|
|
4
|
-
const config = {
|
|
5
|
-
'rules': {
|
|
6
|
-
|
|
7
|
-
// Line by line rules;
|
|
8
|
-
'no-br' : {},
|
|
9
|
-
'no-git-conflict' : {},
|
|
10
|
-
'no-import-package' : {},
|
|
11
|
-
'no-inline-style' : {
|
|
12
|
-
level : 'warning'
|
|
13
|
-
},
|
|
14
|
-
'no-isscript' : {},
|
|
15
|
-
'no-space-only-lines' : {},
|
|
16
|
-
'no-tabs' : {},
|
|
17
|
-
'no-trailing-spaces' : {},
|
|
18
|
-
|
|
19
|
-
// Tree rules;
|
|
20
|
-
'indent' : {},
|
|
21
|
-
'no-redundant-context' : {},
|
|
22
|
-
'max-depth' : {
|
|
23
|
-
level : 'warning'
|
|
24
|
-
},
|
|
25
|
-
'no-hardcode' : {},
|
|
26
|
-
'no-require-in-loop' : {},
|
|
27
|
-
'one-element-per-line' : {
|
|
28
|
-
except: ['iscomment']
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
module.exports = config;
|
|
1
|
+
// Please check all available configurations and rules
|
|
2
|
+
// at https://www.npmjs.com/package/isml-linter.
|
|
3
|
+
|
|
4
|
+
const config = {
|
|
5
|
+
'rules': {
|
|
6
|
+
|
|
7
|
+
// Line by line rules;
|
|
8
|
+
'no-br' : {},
|
|
9
|
+
'no-git-conflict' : {},
|
|
10
|
+
'no-import-package' : {},
|
|
11
|
+
'no-inline-style' : {
|
|
12
|
+
level : 'warning'
|
|
13
|
+
},
|
|
14
|
+
'no-isscript' : {},
|
|
15
|
+
'no-space-only-lines' : {},
|
|
16
|
+
'no-tabs' : {},
|
|
17
|
+
'no-trailing-spaces' : {},
|
|
18
|
+
|
|
19
|
+
// Tree rules;
|
|
20
|
+
'indent' : {},
|
|
21
|
+
'no-redundant-context' : {},
|
|
22
|
+
'max-depth' : {
|
|
23
|
+
level : 'warning'
|
|
24
|
+
},
|
|
25
|
+
'no-hardcode' : {},
|
|
26
|
+
'no-require-in-loop' : {},
|
|
27
|
+
'one-element-per-line' : {
|
|
28
|
+
except: ['iscomment']
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
module.exports = config;
|
package/package.json
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "isml-linter",
|
|
3
|
-
"version": "5.
|
|
4
|
-
"author": "Fabiow Quixadá <ftquixada@gmail.com>",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"main": "src/publicApi.js",
|
|
7
|
-
"engines": {
|
|
8
|
-
"node": ">=10.0.0"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"lint": "./node_modules/.bin/eslint . --fix",
|
|
12
|
-
"test": "jasmine-node spec/",
|
|
13
|
-
"lint:isml": "node scripts/lint.js",
|
|
14
|
-
"build:isml": "node scripts/lint.js --build",
|
|
15
|
-
"fix:isml": "node scripts/lint.js --autofix",
|
|
16
|
-
"prepush": "npm run lint && npm test --silent",
|
|
17
|
-
"release": "node scripts/release"
|
|
18
|
-
},
|
|
19
|
-
"bin": {
|
|
20
|
-
"isml-linter": "./bin/isml-linter.js"
|
|
21
|
-
},
|
|
22
|
-
"repository": {
|
|
23
|
-
"type": "git",
|
|
24
|
-
"url": "https://github.com/FabiowQuixada/isml-linter"
|
|
25
|
-
},
|
|
26
|
-
"keywords": [
|
|
27
|
-
"isml",
|
|
28
|
-
"template",
|
|
29
|
-
"lint",
|
|
30
|
-
"linter",
|
|
31
|
-
"demandware",
|
|
32
|
-
"salesforce",
|
|
33
|
-
"digital-script",
|
|
34
|
-
"sfra",
|
|
35
|
-
"site-genesis"
|
|
36
|
-
],
|
|
37
|
-
"dependencies": {
|
|
38
|
-
"app-root-path": "^3.0.0",
|
|
39
|
-
"chalk": "^4.1.0",
|
|
40
|
-
"eslint": "^7.32.0",
|
|
41
|
-
"readdir": "^1.0.2"
|
|
42
|
-
},
|
|
43
|
-
"devDependencies": {
|
|
44
|
-
"eslint-plugin-jasmine": "^4.1.2",
|
|
45
|
-
"eslint-plugin-varspacing": "^1.2.2",
|
|
46
|
-
"ghooks": "^2.0.4",
|
|
47
|
-
"jasmine": "^3.6.4",
|
|
48
|
-
"jasmine-node": "^3.0.0",
|
|
49
|
-
"rmdir": "^1.2.0",
|
|
50
|
-
"sinon": "^9.2.4",
|
|
51
|
-
"to-snake-case": "^1.0.0"
|
|
52
|
-
}
|
|
53
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "isml-linter",
|
|
3
|
+
"version": "5.40.0",
|
|
4
|
+
"author": "Fabiow Quixadá <ftquixada@gmail.com>",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "src/publicApi.js",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=10.0.0"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"lint": "./node_modules/.bin/eslint . --fix",
|
|
12
|
+
"test": "jasmine-node spec/",
|
|
13
|
+
"lint:isml": "node scripts/lint.js",
|
|
14
|
+
"build:isml": "node scripts/lint.js --build",
|
|
15
|
+
"fix:isml": "node scripts/lint.js --autofix",
|
|
16
|
+
"prepush": "npm run lint && npm test --silent",
|
|
17
|
+
"release": "node scripts/release"
|
|
18
|
+
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"isml-linter": "./bin/isml-linter.js"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/FabiowQuixada/isml-linter"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"isml",
|
|
28
|
+
"template",
|
|
29
|
+
"lint",
|
|
30
|
+
"linter",
|
|
31
|
+
"demandware",
|
|
32
|
+
"salesforce",
|
|
33
|
+
"digital-script",
|
|
34
|
+
"sfra",
|
|
35
|
+
"site-genesis"
|
|
36
|
+
],
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"app-root-path": "^3.0.0",
|
|
39
|
+
"chalk": "^4.1.0",
|
|
40
|
+
"eslint": "^7.32.0",
|
|
41
|
+
"readdir": "^1.0.2"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"eslint-plugin-jasmine": "^4.1.2",
|
|
45
|
+
"eslint-plugin-varspacing": "^1.2.2",
|
|
46
|
+
"ghooks": "^2.0.4",
|
|
47
|
+
"jasmine": "^3.6.4",
|
|
48
|
+
"jasmine-node": "^3.0.0",
|
|
49
|
+
"rmdir": "^1.2.0",
|
|
50
|
+
"sinon": "^9.2.4",
|
|
51
|
+
"to-snake-case": "^1.0.0"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
// Please check all available configurations and rules
|
|
2
|
-
// at https://www.npmjs.com/package/isml-linter.
|
|
3
|
-
|
|
4
|
-
const config = {
|
|
5
|
-
'rules': {
|
|
6
|
-
|
|
7
|
-
// Line by line rules;
|
|
8
|
-
// 'enforce-isprint' : {}, // Known issue, will be fixed on v6.0.0;
|
|
9
|
-
'enforce-require' : {},
|
|
10
|
-
'no-br' : {},
|
|
11
|
-
'no-git-conflict' : {},
|
|
12
|
-
'no-import-package' : {},
|
|
13
|
-
'no-inline-style' : {},
|
|
14
|
-
'no-isscript' : {},
|
|
15
|
-
'no-space-only-lines' : {},
|
|
16
|
-
'no-tabs' : {},
|
|
17
|
-
'no-trailing-spaces' : {},
|
|
18
|
-
'max-lines' : {},
|
|
19
|
-
|
|
20
|
-
// Tree rules;
|
|
21
|
-
'indent' : {},
|
|
22
|
-
'no-redundant-context' : {},
|
|
23
|
-
'leading-iscontent' : {},
|
|
24
|
-
'max-depth' : {},
|
|
25
|
-
'no-embedded-isml' : {},
|
|
26
|
-
'no-hardcode' : {},
|
|
27
|
-
'no-require-in-loop' : {},
|
|
28
|
-
'one-element-per-line' : {},
|
|
29
|
-
'leading-iscache' : {},
|
|
30
|
-
'no-deprecated-attrs' : {},
|
|
31
|
-
'contextual-attrs' : {},
|
|
32
|
-
'custom-tags' : {},
|
|
33
|
-
'eslint-to-isscript' : {},
|
|
34
|
-
'no-iselse-slash' : {},
|
|
35
|
-
'empty-eof' : {},
|
|
36
|
-
'align-isset' : {},
|
|
37
|
-
'disallow-tags' : {
|
|
38
|
-
values : ['isscript', 'br', 'style', 'iframe']
|
|
39
|
-
},
|
|
40
|
-
'enforce-security' : {},
|
|
41
|
-
|
|
42
|
-
// Other
|
|
43
|
-
'lowercase-filename' : {}
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
module.exports = config;
|
|
1
|
+
// Please check all available configurations and rules
|
|
2
|
+
// at https://www.npmjs.com/package/isml-linter.
|
|
3
|
+
|
|
4
|
+
const config = {
|
|
5
|
+
'rules': {
|
|
6
|
+
|
|
7
|
+
// Line by line rules;
|
|
8
|
+
// 'enforce-isprint' : {}, // Known issue, will be fixed on v6.0.0;
|
|
9
|
+
'enforce-require' : {},
|
|
10
|
+
'no-br' : {},
|
|
11
|
+
'no-git-conflict' : {},
|
|
12
|
+
'no-import-package' : {},
|
|
13
|
+
'no-inline-style' : {},
|
|
14
|
+
'no-isscript' : {},
|
|
15
|
+
'no-space-only-lines' : {},
|
|
16
|
+
'no-tabs' : {},
|
|
17
|
+
'no-trailing-spaces' : {},
|
|
18
|
+
'max-lines' : {},
|
|
19
|
+
|
|
20
|
+
// Tree rules;
|
|
21
|
+
'indent' : {},
|
|
22
|
+
'no-redundant-context' : {},
|
|
23
|
+
'leading-iscontent' : {},
|
|
24
|
+
'max-depth' : {},
|
|
25
|
+
'no-embedded-isml' : {},
|
|
26
|
+
'no-hardcode' : {},
|
|
27
|
+
'no-require-in-loop' : {},
|
|
28
|
+
'one-element-per-line' : {},
|
|
29
|
+
'leading-iscache' : {},
|
|
30
|
+
'no-deprecated-attrs' : {},
|
|
31
|
+
'contextual-attrs' : {},
|
|
32
|
+
'custom-tags' : {},
|
|
33
|
+
'eslint-to-isscript' : {},
|
|
34
|
+
'no-iselse-slash' : {},
|
|
35
|
+
'empty-eof' : {},
|
|
36
|
+
'align-isset' : {},
|
|
37
|
+
'disallow-tags' : {
|
|
38
|
+
values : ['isscript', 'br', 'style', 'iframe']
|
|
39
|
+
},
|
|
40
|
+
'enforce-security' : {},
|
|
41
|
+
|
|
42
|
+
// Other
|
|
43
|
+
'lowercase-filename' : {}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
module.exports = config;
|
package/src/Builder.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
const run = path => {
|
|
3
|
-
const IsmlLinter = require('./IsmlLinter');
|
|
4
|
-
const ConsoleUtils = require('./util/ConsoleUtils');
|
|
5
|
-
|
|
6
|
-
const lintResults = IsmlLinter.run(path);
|
|
7
|
-
|
|
8
|
-
ConsoleUtils.displayOccurrenceList(lintResults);
|
|
9
|
-
|
|
10
|
-
return lintResults.issueQty > 0 ? 1 : 0;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
module.exports = {
|
|
14
|
-
run
|
|
15
|
-
};
|
|
1
|
+
|
|
2
|
+
const run = path => {
|
|
3
|
+
const IsmlLinter = require('./IsmlLinter');
|
|
4
|
+
const ConsoleUtils = require('./util/ConsoleUtils');
|
|
5
|
+
|
|
6
|
+
const lintResults = IsmlLinter.run(path);
|
|
7
|
+
|
|
8
|
+
ConsoleUtils.displayOccurrenceList(lintResults);
|
|
9
|
+
|
|
10
|
+
return lintResults.issueQty > 0 ? 1 : 0;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
module.exports = {
|
|
14
|
+
run
|
|
15
|
+
};
|
package/src/Constants.js
CHANGED
|
@@ -1,139 +1,139 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const appRoot = require('app-root-path');
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const OS_EOL = require('os').EOL;
|
|
5
|
-
const EOL = '\n'; // Internal processing line break;
|
|
6
|
-
|
|
7
|
-
// Environments;
|
|
8
|
-
const ENV_DEV = 'dev';
|
|
9
|
-
const ENV_TEST = 'test';
|
|
10
|
-
const ENV_PROD = 'prod';
|
|
11
|
-
|
|
12
|
-
// File names;
|
|
13
|
-
const configFileNameList = ['ismllinter.config.js', '.ismllinter.json', '.ismllintrc.js'];
|
|
14
|
-
const eslintConfigFileNameList = ['.eslintrc.json', '.eslintrc.js', '.eslintrc'];
|
|
15
|
-
|
|
16
|
-
const clientAppDir = appRoot.toString();
|
|
17
|
-
const productionDir = path.join(clientAppDir, 'node_modules', 'isml-linter');
|
|
18
|
-
const linterModuleDir = fs.existsSync(productionDir) ? productionDir : clientAppDir;
|
|
19
|
-
|
|
20
|
-
// Directories;
|
|
21
|
-
const specDir = path.join(appRoot.toString(), 'spec');
|
|
22
|
-
const specTempDir = path.join(specDir, 'temp');
|
|
23
|
-
const specTemplateDir = path.join(specDir, 'templates', 'default');
|
|
24
|
-
const specFileParserTemplate = path.join(specTemplateDir, 'file_parser');
|
|
25
|
-
const specLinterTemplate = path.join(specTemplateDir, 'isml_linter');
|
|
26
|
-
const specSpecificDirLinterTemplate = path.join('spec', 'templates', 'default', 'isml_linter', 'specific_directory_to_be_linted');
|
|
27
|
-
const specUnparseableDirLinterTemplate = path.join('spec', 'templates', 'default', 'isml_linter', 'unparseable');
|
|
28
|
-
const specFilenameTemplate = path.join('spec', 'templates', 'default', 'isml_linter', 'filenames');
|
|
29
|
-
const specConfigTemplate = path.join('spec', 'templates', 'default', 'config');
|
|
30
|
-
const specIgnoreDirLinterTemplateDir = path.join(specLinterTemplate, 'ignore_config');
|
|
31
|
-
const specRuleTemplateDir = path.join(specTemplateDir, 'rules');
|
|
32
|
-
const specIsmlTreeTemplateDir = path.join(specTemplateDir, 'isml_tree');
|
|
33
|
-
const specIsmlNodeTemplateDir = path.join(specTemplateDir, 'isml_node');
|
|
34
|
-
const specPublicApiTemplatesDir = path.join(specTemplateDir, 'public_api');
|
|
35
|
-
const specLineNumberTemplateDir = path.join(specIsmlTreeTemplateDir, 'line_numbers');
|
|
36
|
-
const specColumnNumberTemplateDir = path.join(specIsmlTreeTemplateDir, 'column_number');
|
|
37
|
-
const specInvalidTemplateDir = path.join(specIsmlTreeTemplateDir, 'invalid_templates');
|
|
38
|
-
const specGlobalPosTemplateDir = path.join(specIsmlTreeTemplateDir, 'global_position');
|
|
39
|
-
const specComplexTemplatesDir = path.join(specIsmlTreeTemplateDir, 'complex_templates');
|
|
40
|
-
const specElementBalanceTemplatesDir = path.join(specIsmlTreeTemplateDir, 'element_balance');
|
|
41
|
-
const specTailLineNumberTemplatesDir = path.join(specIsmlTreeTemplateDir, 'tail_line_number');
|
|
42
|
-
const specAutofixTemplatesDir = path.join(specTemplateDir, 'autofix');
|
|
43
|
-
const rulesDir = path.join(linterModuleDir, 'src', 'rules');
|
|
44
|
-
const lineByLineRulesDir = path.join(rulesDir, 'line_by_line');
|
|
45
|
-
const treeRulesDir = path.join(rulesDir, 'tree');
|
|
46
|
-
|
|
47
|
-
// Regex;
|
|
48
|
-
const srcJsRegex = path.join('src', '**', '*.js');
|
|
49
|
-
const appJsRegex = path.join('src', '**', '*.js');
|
|
50
|
-
const specJsRegex = path.join('spec', '**', '*.js');
|
|
51
|
-
|
|
52
|
-
// File paths;
|
|
53
|
-
const configFilePathList = configFileNameList.map( fileName => path.join(clientAppDir, fileName));
|
|
54
|
-
const eslintConfigFilePathList = eslintConfigFileNameList.map( fileName => path.join(clientAppDir, fileName));
|
|
55
|
-
|
|
56
|
-
// Links;
|
|
57
|
-
const repositoryUrl = 'https://github.com/FabiowQuixada/isml-linter';
|
|
58
|
-
|
|
59
|
-
// Other;
|
|
60
|
-
const voidElementsArray = [
|
|
61
|
-
'area', 'base', 'br', 'col',
|
|
62
|
-
'command', 'embed', 'hr', 'img',
|
|
63
|
-
'input', 'keygen', 'link', 'meta',
|
|
64
|
-
'param', 'source', 'track', 'wbr'
|
|
65
|
-
];
|
|
66
|
-
const lineBreak = {
|
|
67
|
-
windows : '\r\n',
|
|
68
|
-
unix : '\n'
|
|
69
|
-
};
|
|
70
|
-
const occurrenceLevels = {
|
|
71
|
-
ERROR : 'error',
|
|
72
|
-
WARNINGS : 'warning',
|
|
73
|
-
INFO : 'info',
|
|
74
|
-
toArray : () => ['info', 'warning', 'error']
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
const leadingElementsChecking = 4;
|
|
78
|
-
|
|
79
|
-
module.exports = {
|
|
80
|
-
// Client directories;
|
|
81
|
-
clientAppDir,
|
|
82
|
-
|
|
83
|
-
// Directories;
|
|
84
|
-
ismlLinterSpecDir: specLinterTemplate,
|
|
85
|
-
specSpecificDirLinterTemplate,
|
|
86
|
-
specUnparseableDirLinterTemplate,
|
|
87
|
-
specFilenameTemplate,
|
|
88
|
-
specConfigTemplate,
|
|
89
|
-
specIgnoreDirLinterTemplateDir,
|
|
90
|
-
templateParserSpecDir: specFileParserTemplate,
|
|
91
|
-
specTempDir,
|
|
92
|
-
rulesDir,
|
|
93
|
-
specTemplateDir,
|
|
94
|
-
lineByLineRulesDir,
|
|
95
|
-
treeRulesDir,
|
|
96
|
-
specRuleTemplateDir,
|
|
97
|
-
specPublicApiTemplatesDir,
|
|
98
|
-
specIsmlTreeTemplateDir,
|
|
99
|
-
specIsmlNodeTemplateDir,
|
|
100
|
-
specGlobalPosTemplateDir,
|
|
101
|
-
specLineNumberTemplateDir,
|
|
102
|
-
specColumnNumberTemplateDir,
|
|
103
|
-
specInvalidTemplateDir,
|
|
104
|
-
specComplexTemplatesDir,
|
|
105
|
-
specAutofixTemplatesDir,
|
|
106
|
-
specElementBalanceTemplatesDir,
|
|
107
|
-
specTailLineNumberTemplatesDir,
|
|
108
|
-
specDir,
|
|
109
|
-
linterModuleDir,
|
|
110
|
-
|
|
111
|
-
// File names;
|
|
112
|
-
configFileNameList,
|
|
113
|
-
eslintConfigFileNameList,
|
|
114
|
-
|
|
115
|
-
// File paths;
|
|
116
|
-
configFilePathList,
|
|
117
|
-
eslintConfigFilePathList,
|
|
118
|
-
|
|
119
|
-
// Regex;
|
|
120
|
-
srcJsRegex,
|
|
121
|
-
appJsRegex,
|
|
122
|
-
specJsRegex,
|
|
123
|
-
|
|
124
|
-
// Environments;
|
|
125
|
-
ENV_DEV,
|
|
126
|
-
ENV_TEST,
|
|
127
|
-
ENV_PROD,
|
|
128
|
-
|
|
129
|
-
// Links
|
|
130
|
-
repositoryUrl,
|
|
131
|
-
|
|
132
|
-
// Other;
|
|
133
|
-
voidElementsArray,
|
|
134
|
-
leadingElementsChecking,
|
|
135
|
-
occurrenceLevels,
|
|
136
|
-
EOL,
|
|
137
|
-
OS_EOL,
|
|
138
|
-
lineBreak
|
|
139
|
-
};
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const appRoot = require('app-root-path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const OS_EOL = require('os').EOL;
|
|
5
|
+
const EOL = '\n'; // Internal processing line break;
|
|
6
|
+
|
|
7
|
+
// Environments;
|
|
8
|
+
const ENV_DEV = 'dev';
|
|
9
|
+
const ENV_TEST = 'test';
|
|
10
|
+
const ENV_PROD = 'prod';
|
|
11
|
+
|
|
12
|
+
// File names;
|
|
13
|
+
const configFileNameList = ['ismllinter.config.js', '.ismllinter.json', '.ismllintrc.js'];
|
|
14
|
+
const eslintConfigFileNameList = ['.eslintrc.json', '.eslintrc.js', '.eslintrc'];
|
|
15
|
+
|
|
16
|
+
const clientAppDir = appRoot.toString();
|
|
17
|
+
const productionDir = path.join(clientAppDir, 'node_modules', 'isml-linter');
|
|
18
|
+
const linterModuleDir = fs.existsSync(productionDir) ? productionDir : clientAppDir;
|
|
19
|
+
|
|
20
|
+
// Directories;
|
|
21
|
+
const specDir = path.join(appRoot.toString(), 'spec');
|
|
22
|
+
const specTempDir = path.join(specDir, 'temp');
|
|
23
|
+
const specTemplateDir = path.join(specDir, 'templates', 'default');
|
|
24
|
+
const specFileParserTemplate = path.join(specTemplateDir, 'file_parser');
|
|
25
|
+
const specLinterTemplate = path.join(specTemplateDir, 'isml_linter');
|
|
26
|
+
const specSpecificDirLinterTemplate = path.join('spec', 'templates', 'default', 'isml_linter', 'specific_directory_to_be_linted');
|
|
27
|
+
const specUnparseableDirLinterTemplate = path.join('spec', 'templates', 'default', 'isml_linter', 'unparseable');
|
|
28
|
+
const specFilenameTemplate = path.join('spec', 'templates', 'default', 'isml_linter', 'filenames');
|
|
29
|
+
const specConfigTemplate = path.join('spec', 'templates', 'default', 'config');
|
|
30
|
+
const specIgnoreDirLinterTemplateDir = path.join(specLinterTemplate, 'ignore_config');
|
|
31
|
+
const specRuleTemplateDir = path.join(specTemplateDir, 'rules');
|
|
32
|
+
const specIsmlTreeTemplateDir = path.join(specTemplateDir, 'isml_tree');
|
|
33
|
+
const specIsmlNodeTemplateDir = path.join(specTemplateDir, 'isml_node');
|
|
34
|
+
const specPublicApiTemplatesDir = path.join(specTemplateDir, 'public_api');
|
|
35
|
+
const specLineNumberTemplateDir = path.join(specIsmlTreeTemplateDir, 'line_numbers');
|
|
36
|
+
const specColumnNumberTemplateDir = path.join(specIsmlTreeTemplateDir, 'column_number');
|
|
37
|
+
const specInvalidTemplateDir = path.join(specIsmlTreeTemplateDir, 'invalid_templates');
|
|
38
|
+
const specGlobalPosTemplateDir = path.join(specIsmlTreeTemplateDir, 'global_position');
|
|
39
|
+
const specComplexTemplatesDir = path.join(specIsmlTreeTemplateDir, 'complex_templates');
|
|
40
|
+
const specElementBalanceTemplatesDir = path.join(specIsmlTreeTemplateDir, 'element_balance');
|
|
41
|
+
const specTailLineNumberTemplatesDir = path.join(specIsmlTreeTemplateDir, 'tail_line_number');
|
|
42
|
+
const specAutofixTemplatesDir = path.join(specTemplateDir, 'autofix');
|
|
43
|
+
const rulesDir = path.join(linterModuleDir, 'src', 'rules');
|
|
44
|
+
const lineByLineRulesDir = path.join(rulesDir, 'line_by_line');
|
|
45
|
+
const treeRulesDir = path.join(rulesDir, 'tree');
|
|
46
|
+
|
|
47
|
+
// Regex;
|
|
48
|
+
const srcJsRegex = path.join('src', '**', '*.js');
|
|
49
|
+
const appJsRegex = path.join('src', '**', '*.js');
|
|
50
|
+
const specJsRegex = path.join('spec', '**', '*.js');
|
|
51
|
+
|
|
52
|
+
// File paths;
|
|
53
|
+
const configFilePathList = configFileNameList.map( fileName => path.join(clientAppDir, fileName));
|
|
54
|
+
const eslintConfigFilePathList = eslintConfigFileNameList.map( fileName => path.join(clientAppDir, fileName));
|
|
55
|
+
|
|
56
|
+
// Links;
|
|
57
|
+
const repositoryUrl = 'https://github.com/FabiowQuixada/isml-linter';
|
|
58
|
+
|
|
59
|
+
// Other;
|
|
60
|
+
const voidElementsArray = [
|
|
61
|
+
'area', 'base', 'br', 'col',
|
|
62
|
+
'command', 'embed', 'hr', 'img',
|
|
63
|
+
'input', 'keygen', 'link', 'meta',
|
|
64
|
+
'param', 'source', 'track', 'wbr'
|
|
65
|
+
];
|
|
66
|
+
const lineBreak = {
|
|
67
|
+
windows : '\r\n',
|
|
68
|
+
unix : '\n'
|
|
69
|
+
};
|
|
70
|
+
const occurrenceLevels = {
|
|
71
|
+
ERROR : 'error',
|
|
72
|
+
WARNINGS : 'warning',
|
|
73
|
+
INFO : 'info',
|
|
74
|
+
toArray : () => ['info', 'warning', 'error']
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const leadingElementsChecking = 4;
|
|
78
|
+
|
|
79
|
+
module.exports = {
|
|
80
|
+
// Client directories;
|
|
81
|
+
clientAppDir,
|
|
82
|
+
|
|
83
|
+
// Directories;
|
|
84
|
+
ismlLinterSpecDir: specLinterTemplate,
|
|
85
|
+
specSpecificDirLinterTemplate,
|
|
86
|
+
specUnparseableDirLinterTemplate,
|
|
87
|
+
specFilenameTemplate,
|
|
88
|
+
specConfigTemplate,
|
|
89
|
+
specIgnoreDirLinterTemplateDir,
|
|
90
|
+
templateParserSpecDir: specFileParserTemplate,
|
|
91
|
+
specTempDir,
|
|
92
|
+
rulesDir,
|
|
93
|
+
specTemplateDir,
|
|
94
|
+
lineByLineRulesDir,
|
|
95
|
+
treeRulesDir,
|
|
96
|
+
specRuleTemplateDir,
|
|
97
|
+
specPublicApiTemplatesDir,
|
|
98
|
+
specIsmlTreeTemplateDir,
|
|
99
|
+
specIsmlNodeTemplateDir,
|
|
100
|
+
specGlobalPosTemplateDir,
|
|
101
|
+
specLineNumberTemplateDir,
|
|
102
|
+
specColumnNumberTemplateDir,
|
|
103
|
+
specInvalidTemplateDir,
|
|
104
|
+
specComplexTemplatesDir,
|
|
105
|
+
specAutofixTemplatesDir,
|
|
106
|
+
specElementBalanceTemplatesDir,
|
|
107
|
+
specTailLineNumberTemplatesDir,
|
|
108
|
+
specDir,
|
|
109
|
+
linterModuleDir,
|
|
110
|
+
|
|
111
|
+
// File names;
|
|
112
|
+
configFileNameList,
|
|
113
|
+
eslintConfigFileNameList,
|
|
114
|
+
|
|
115
|
+
// File paths;
|
|
116
|
+
configFilePathList,
|
|
117
|
+
eslintConfigFilePathList,
|
|
118
|
+
|
|
119
|
+
// Regex;
|
|
120
|
+
srcJsRegex,
|
|
121
|
+
appJsRegex,
|
|
122
|
+
specJsRegex,
|
|
123
|
+
|
|
124
|
+
// Environments;
|
|
125
|
+
ENV_DEV,
|
|
126
|
+
ENV_TEST,
|
|
127
|
+
ENV_PROD,
|
|
128
|
+
|
|
129
|
+
// Links
|
|
130
|
+
repositoryUrl,
|
|
131
|
+
|
|
132
|
+
// Other;
|
|
133
|
+
voidElementsArray,
|
|
134
|
+
leadingElementsChecking,
|
|
135
|
+
occurrenceLevels,
|
|
136
|
+
EOL,
|
|
137
|
+
OS_EOL,
|
|
138
|
+
lineBreak
|
|
139
|
+
};
|