New: Update from sonarwhal to webhint

This commit is contained in:
Jesus David García Gomez 2018-09-12 09:20:40 -07:00 коммит произвёл Antón Molleda
Родитель ab94202114
Коммит b52a5260f4
36 изменённых файлов: 27002 добавлений и 39297 удалений

5
.gitignore поставляемый
Просмотреть файл

@ -2,11 +2,12 @@
*.log *.log
*.pid *.pid
*.STALE *.STALE
hints/*/.eslintcache
.DS_Store .DS_Store
.nyc_output .nyc_output
/.vscode/ /.vscode/
/build/ /build/
/coverage/ /coverage/
rules/*/node_modules/ hints/*/node_modules/
rules/*/dist/ hints/*/dist/

Просмотреть файл

@ -1,11 +1,11 @@
# Microsoft sonarwhal rules # Microsoft webhint hints
This repository contains rules specific to Microsoft projects. This repository contains hints specific to Microsoft projects.
To know more about each rule package, visit their respective `readme.md`: To know more about each hint package, visit their respective `readme.md`:
* [chisel](./rules/chisel/README.md) * [chisel](./hints/chisel/README.md)
* [jsll](./rules/jsll/README.md) * [jsll](./hints/jsll/README.md)
# Contributing # Contributing

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -7,8 +7,8 @@
}, },
"formatters": "stylish", "formatters": "stylish",
"parsers": [], "parsers": [],
"rulesTimeout": 120000, "hintsTimeout": 120000,
"rules": { "hints": {
"chisel": "warning" "chisel": "warning"
} }
} }

Просмотреть файл

Просмотреть файл

@ -2,24 +2,24 @@
Use Chisel to assess the accessibility of a web site or web application. Use Chisel to assess the accessibility of a web site or web application.
In order to install this rule you need to be a Microsoft employee and In order to install this hint you need to be a Microsoft employee and
have access to the `chisel` registry, otherwise you'll have errors during have access to the `chisel` registry, otherwise you'll have errors during
the installation. the installation.
## Can the rule be configured? ## Can the hint be configured?
Yes, you can configure this rule in your `sonarwhal` configuration file as Yes, you can configure this hint in your `webhint` configuration file as
follows: follows:
```json ```json
"rules": { "hints": {
"chisel": ["warning", { "testsToRun": "color-contrast"}] "chisel": ["warning", { "testsToRun": "color-contrast"}]
} }
``` ```
The available parameters include: The available parameters include:
* `testsToRun?`: `string[]` - (Optional) Used to set the rules that will be run * `testsToRun?`: `string[]` - (Optional) Used to set the hints that will be run
in chisel test run. in chisel test run.
* `dom?`: `NodeSelector & Node | NodeList` - (Optional) Used to set the elements * `dom?`: `NodeSelector & Node | NodeList` - (Optional) Used to set the elements
@ -37,6 +37,6 @@ The available parameters include:
elements that will not be tested and can be used with include; ignored if elements that will not be tested and can be used with include; ignored if
dom or selector are set. dom or selector are set.
* `enableBestPracticeRules?`: `boolean` - (Optional, default is `false`) Enables * `enableBestPracticeHints?`: `boolean` - (Optional, default is `false`) Enables
rule that are not mapped to MAS/considered best practice; default is false hint that are not mapped to MAS/considered best practice; default is false
and ignored if testsToRun is set. and ignored if testsToRun is set.

13350
hints/chisel/package-lock.json сгенерированный Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -12,10 +12,12 @@
"timeout": "1m" "timeout": "1m"
}, },
"dependencies": { "dependencies": {
"@mskeros/chisel": "^1.132.3" "@mskeros/chisel": "^1.141.1"
}, },
"description": "sonarwhal rule to assess the accessibility of a web site using Microsoft's Chisel.", "description": "webhint hint to assess the accessibility of a web site using Microsoft's Chisel.",
"devDependencies": { "devDependencies": {
"@hint/parser-javascript": "^1.0.1",
"@hint/utils-tests-helpers": "^1.0.1",
"@types/debug": "0.0.30", "@types/debug": "0.0.30",
"@types/node": "8.0.14", "@types/node": "8.0.14",
"async-retry": "^1.1.4", "async-retry": "^1.1.4",
@ -29,12 +31,12 @@
"eslint-plugin-markdown": "^1.0.0-beta.6", "eslint-plugin-markdown": "^1.0.0-beta.6",
"eslint-plugin-typescript": "^0.8.1", "eslint-plugin-typescript": "^0.8.1",
"express": "^4.16.2", "express": "^4.16.2",
"hint": "^3.4.0",
"markdownlint-cli": "^0.6.0", "markdownlint-cli": "^0.6.0",
"npm-run-all": "^4.1.2", "npm-run-all": "^4.1.2",
"nyc": "^11.4.1", "nyc": "^11.4.1",
"on-headers": "^1.0.1", "on-headers": "^1.0.1",
"rimraf": "^2.6.2", "rimraf": "^2.6.2",
"sonarwhal": "^1.0.0",
"typescript": "^2.6.2", "typescript": "^2.6.2",
"typescript-eslint-parser": "^12.0.0" "typescript-eslint-parser": "^12.0.0"
}, },
@ -45,21 +47,21 @@
"dist/src", "dist/src",
"npm-shrinkwrap.json" "npm-shrinkwrap.json"
], ],
"homepage": "https://sonarwhal.com", "homepage": "https://webhint.io",
"keywords": [ "keywords": [
"chisel", "chisel",
"rule", "hint",
"sonarwhal", "webhint",
"sonarwhal-chisel" "webhint-chisel"
], ],
"license": "Apache-2.0", "license": "Apache-2.0",
"main": "dist/src/index.js", "main": "dist/src/index.js",
"name": "sonarwhal-rule-chisel", "name": "webhint-hint-chisel",
"peerDependencies": { "peerDependencies": {
"sonarwhal": "^1.0.0", "hint": "^3.4.0",
"@sonarwhal/parser-javascript": "^2.0.0" "@hint/parser-javascript": "^1.0.1"
}, },
"repository": "Microsoft/sonarwhal-microsoft-rules", "repository": "Microsoft/webhint-hints-microsoft",
"scripts": { "scripts": {
"build": "npm run clean && npm-run-all build:*", "build": "npm run clean && npm-run-all build:*",
"build-release": "npm run clean && npm run build:assets && tsc --inlineSourceMap false --removeComments true", "build-release": "npm run clean && npm run build:assets && tsc --inlineSourceMap false --removeComments true",
@ -74,7 +76,7 @@
"watch:assets": "npm run build:assets -- -w --no-initial", "watch:assets": "npm run build:assets -- -w --no-initial",
"watch:test": "ava --watch", "watch:test": "ava --watch",
"watch:ts": "npm run build:ts -- --watch", "watch:ts": "npm run build:ts -- --watch",
"sonarwhal": "node node_modules/sonarwhal/dist/src/bin/sonarwhal.js" "webhint": "node node_modules/hint/dist/src/bin/hint.js"
}, },
"version": "1.0.0" "version": "2.0.0"
} }

Просмотреть файл

@ -2,13 +2,13 @@
* @fileoverview Use Chisel to assess the accessibility of a web site or web application. * @fileoverview Use Chisel to assess the accessibility of a web site or web application.
*/ */
import { Category } from 'sonarwhal/dist/src/lib/enums/category'; import { Category } from 'hint/dist/src/lib/enums/category';
import { RuleContext } from 'sonarwhal/dist/src/lib/rule-context'; import { HintContext } from 'hint/dist/src/lib/hint-context';
import { RuleMetadata, TraverseEnd, IAsyncHTMLElement, Severity } from 'sonarwhal/dist/src/lib/types'; import { HintMetadata, TraverseEnd, IAsyncHTMLElement, Severity } from 'hint/dist/src/lib/types';
import { debug as d } from 'sonarwhal/dist/src/lib/utils/debug'; import { debug as d } from 'hint/dist/src/lib/utils/debug';
import { IChiselResults, AxeNodeResult, AxeRule, IChiselDecorations, IChiselOptions } from '@mskeros/chisel/chisel'; import { IChiselResults, AxeNodeResult, AxeRule, IChiselDecorations, IChiselOptions } from '@mskeros/chisel/chisel';
import { readFileAsync } from 'sonarwhal/dist/src/lib/utils/misc'; import readFileAsync from 'hint/dist/src/lib/utils/fs/read-file-async';
import { RuleScope } from 'sonarwhal/dist/src/lib/enums/rulescope'; import { HintScope } from 'hint/dist/src/lib/enums/hintscope';
const debug: debug.IDebugger = d(__filename); const debug: debug.IDebugger = d(__filename);
@ -18,8 +18,8 @@ const debug: debug.IDebugger = d(__filename);
* Public * Public
* ------------------------------------------------------------------------------ * ------------------------------------------------------------------------------
*/ */
export default class ChiselRule { export default class ChiselHint {
public static readonly meta: RuleMetadata = { public static readonly meta: HintMetadata = {
docs: { docs: {
category: Category.accessibility, category: Category.accessibility,
description: `Use Chisel to assess the accessibility of a web site or web application.` description: `Use Chisel to assess the accessibility of a web site or web application.`
@ -29,7 +29,7 @@ export default class ChiselRule {
additionalProperties: false, additionalProperties: false,
properties: { properties: {
dom: { type: ['string', 'array'] }, dom: { type: ['string', 'array'] },
enableBestPracticeRules: { type: 'boolean' }, enableBestPracticeHints: { type: 'boolean' },
exclude: { exclude: {
items: { type: 'string' }, items: { type: 'string' },
type: 'array' type: 'array'
@ -45,36 +45,36 @@ export default class ChiselRule {
} }
} }
}], }],
scope: RuleScope.site scope: HintScope.any
}; };
public constructor(context: RuleContext) { public constructor(context: HintContext) {
/** Configuration of the chisel rule. */ /** Configuration of the chisel hint. */
let chiselConfig: IChiselOptions = {}; let chiselConfig: IChiselOptions = {};
/** Table of overriden config properties. */ /** Table of overriden config properties. */
const overrideLookUp: object = { const overrideLookUp: object = {
dom: ['include', 'exclude'], dom: ['include', 'exclude'],
selector: ['include', 'exclude'], selector: ['include', 'exclude'],
testsToRun: ['enableBestPracticeRules'] testsToRun: ['enableBestPracticeHints']
}; };
/** Interface of a chisel violation. */ /** Interface of a chisel violation. */
interface IChiselViolation extends AxeRule, IChiselDecorations { } interface IChiselViolation extends AxeRule, IChiselDecorations { }
/** Load rule configuration. */ /** Load hint configuration. */
const loadRuleConfig = () => { const loadHintConfig = () => {
if (!context.ruleOptions) { if (!context.hintOptions) {
return; return;
} }
chiselConfig = context.ruleOptions; chiselConfig = context.hintOptions;
}; };
/** Generate the script to initiate the chisel scan in a page. */ /** Generate the script to initiate the chisel scan in a page. */
const generateScript = (): string => { const generateScript = (): string => {
// This is run in the page, not sonarwhal itself. // This is run in the page, not webhint itself.
const script: string = const script: string =
`function runChiselScan() { `function runChiselScan() {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
@ -170,7 +170,7 @@ export default class ChiselRule {
await Promise.all(reportPromises); await Promise.all(reportPromises);
}; };
loadRuleConfig(); loadHintConfig();
context.on('traverse::end', validate); context.on('traverse::end', validate);
} }

Просмотреть файл

@ -0,0 +1 @@
module.exports = { chisel: require('./hint') };

Просмотреть файл

@ -1,9 +1,8 @@
import { generateHTMLPage } from 'sonarwhal/dist/tests/helpers/misc'; import generateHTMLPage from 'hint/dist/src/lib/utils/misc/generate-html-page';
import { getRuleName } from 'sonarwhal/dist/src/lib/utils/rule-helpers'; import { HintTest } from '@hint/utils-tests-helpers/dist/src/hint-test-type';
import { IRuleTest } from 'sonarwhal/dist/tests/helpers/rule-test-type'; import * as hintRunner from '@hint/utils-tests-helpers/dist/src/hint-runner';
import * as ruleRunner from 'sonarwhal/dist/tests/helpers/rule-runner';
const ruleName = getRuleName(__dirname); const hintName = 'chisel';
const html = { const html = {
missingLang: `<!doctype html> missingLang: `<!doctype html>
@ -17,7 +16,7 @@ const html = {
noProblems: generateHTMLPage() noProblems: generateHTMLPage()
}; };
const tests: Array<IRuleTest> = [ const tests: Array<HintTest> = [
{ {
name: `Page doesn't have any a11y problems and passes`, name: `Page doesn't have any a11y problems and passes`,
serverConfig: html.noProblems serverConfig: html.noProblems
@ -29,7 +28,7 @@ const tests: Array<IRuleTest> = [
} }
]; ];
const testsWithCustomConfiguration: Array<IRuleTest> = [ const testsWithCustomConfiguration: Array<HintTest> = [
{ {
name: `Page doesn't have any a11y problems and passes`, name: `Page doesn't have any a11y problems and passes`,
serverConfig: html.noProblems serverConfig: html.noProblems
@ -40,7 +39,7 @@ const testsWithCustomConfiguration: Array<IRuleTest> = [
} }
]; ];
const testsWithOverridenConfiguration: Array<IRuleTest> = [ const testsWithOverridenConfiguration: Array<HintTest> = [
{ {
name: `Page doesn't have any a11y problems and passes, but warns about the overriden config setting`, name: `Page doesn't have any a11y problems and passes, but warns about the overriden config setting`,
reports: [{ message: 'exclude is ignored when selector is set.' }], reports: [{ message: 'exclude is ignored when selector is set.' }],
@ -53,10 +52,10 @@ const testsWithOverridenConfiguration: Array<IRuleTest> = [
} }
]; ];
ruleRunner.testRule(ruleName, tests); hintRunner.testHint(hintName, tests);
ruleRunner.testRule(ruleName, testsWithCustomConfiguration, { ruleOptions: { testsToRun: ['color-contrast'] } }); hintRunner.testHint(hintName, testsWithCustomConfiguration, { hintOptions: { testsToRun: ['color-contrast'] } });
ruleRunner.testRule(ruleName, testsWithOverridenConfiguration, { hintRunner.testHint(hintName, testsWithOverridenConfiguration, {
ruleOptions: { hintOptions: {
exclude: ['html'], exclude: ['html'],
selector: 'html' selector: 'html'
} }

Просмотреть файл

@ -1,8 +1,8 @@
import { generateHTMLPage } from 'sonarwhal/dist/tests/helpers/misc'; import generateHTMLPage from 'hint/dist/src/lib/utils/misc/generate-html-page';
import { RuleTest } from 'sonarwhal/dist/tests/helpers/rule-test-type'; import { HintTest } from '@hint/utils-tests-helpers/dist/src/hint-test-type';
import * as ruleRunner from 'sonarwhal/dist/tests/helpers/rule-runner'; import * as hintRunner from '@hint/utils-tests-helpers/dist/src/hint-runner';
const ruleName = 'chisel'; const hintName = 'chisel';
const html = { const html = {
missingLang: `<!doctype html> missingLang: `<!doctype html>
@ -16,7 +16,7 @@ const html = {
noProblems: generateHTMLPage() noProblems: generateHTMLPage()
}; };
const tests: Array<RuleTest> = [ const tests: Array<HintTest> = [
{ {
name: `Page doesn't have any a11y problems and passes`, name: `Page doesn't have any a11y problems and passes`,
serverConfig: html.noProblems serverConfig: html.noProblems
@ -28,7 +28,7 @@ const tests: Array<RuleTest> = [
} }
]; ];
const testsWithCustomConfiguration: Array<RuleTest> = [ const testsWithCustomConfiguration: Array<HintTest> = [
{ {
name: `Page doesn't have any a11y problems and passes`, name: `Page doesn't have any a11y problems and passes`,
serverConfig: html.noProblems serverConfig: html.noProblems
@ -39,7 +39,7 @@ const testsWithCustomConfiguration: Array<RuleTest> = [
} }
]; ];
const testsWithOverridenConfiguration: Array<RuleTest> = [ const testsWithOverridenConfiguration: Array<HintTest> = [
{ {
name: `Page doesn't have any a11y problems and passes, but warns about the overriden config setting`, name: `Page doesn't have any a11y problems and passes, but warns about the overriden config setting`,
reports: [{ message: 'exclude is ignored when selector is set.' }], reports: [{ message: 'exclude is ignored when selector is set.' }],
@ -52,10 +52,10 @@ const testsWithOverridenConfiguration: Array<RuleTest> = [
} }
]; ];
ruleRunner.testRule(ruleName, tests); hintRunner.testHint(hintName, tests);
ruleRunner.testRule(ruleName, testsWithCustomConfiguration, { ruleOptions: { testsToRun: ['color-contrast'] } }); hintRunner.testHint(hintName, testsWithCustomConfiguration, { hintOptions: { testsToRun: ['color-contrast'] } });
ruleRunner.testRule(ruleName, testsWithOverridenConfiguration, { hintRunner.testHint(hintName, testsWithOverridenConfiguration, {
ruleOptions: { hintOptions: {
exclude: ['html'], exclude: ['html'],
selector: 'html' selector: 'html'
} }

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -8,8 +8,8 @@
"formatters": "stylish", "formatters": "stylish",
"ignoredUrls": [], "ignoredUrls": [],
"parsers": ["javascript"], "parsers": ["javascript"],
"rulesTimeout": 120000, "hintsTimeout": 120000,
"rules": { "hints": {
"jsll/awa-init": "error", "jsll/awa-init": "error",
"jsll/script-included": "error", "jsll/script-included": "error",
"jsll/validate-config": "error" "jsll/validate-config": "error"

Просмотреть файл

Просмотреть файл

@ -1,18 +1,18 @@
# jsll (`jsll`) # jsll (`jsll`)
Validate the inclusion and initialization of the JSLL script via Validate the inclusion and initialization of the JSLL script via
multiple related rules. multiple related hints.
## What does the rule check? ## What does the hint check?
JSLL is the analytics library used by Microsoft. This package JSLL is the analytics library used by Microsoft. This package
contains the following rules: contains the following hints:
* `jsll/script-included` * `jsll/script-included`
* `jsll/awa-init` * `jsll/awa-init`
* `jsll/validate-config` * `jsll/validate-config`
These rules test the following: These hints test the following:
* Whether or not the JSLL script has been included. * Whether or not the JSLL script has been included.
* If the script is inlcuded in `<head>`. * If the script is inlcuded in `<head>`.
@ -28,7 +28,7 @@ These rules test the following:
* Validate the required properties in `config`. * Validate the required properties in `config`.
* Validate Optional properties in `config`. * Validate Optional properties in `config`.
### Examples that **trigger** the rule ### Examples that **trigger** the hint
The JSLL script was not included The JSLL script was not included
@ -92,7 +92,7 @@ Invalid required/optional properties.
</head> </head>
``` ```
### Examples that **pass** the rule ### Examples that **pass** the hint
```html ```html
<head> <head>
@ -117,7 +117,7 @@ Invalid required/optional properties.
</head> </head>
``` ```
### How the rule works ### How the hint works
* `script-included` uses two variables `totalHeadScriptCount` and * `script-included` uses two variables `totalHeadScriptCount` and
`jsllScriptCount` to keep track of the total number of script tags and the `jsllScriptCount` to keep track of the total number of script tags and the

13493
hints/jsll/package-lock.json сгенерированный Normal file

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -12,12 +12,13 @@
"timeout": "1m" "timeout": "1m"
}, },
"dependencies": { "dependencies": {
"locale-code": "^1.1.1", "eslint": "^4.18.2",
"eslint": "^4.18.2" "locale-code": "^1.1.1"
}, },
"description": "sonarwhal rule to validate Microsoft's JSLL usage.", "description": "webhint hint to validate Microsoft's JSLL usage.",
"devDependencies": { "devDependencies": {
"@sonarwhal/parser-javascript": "^2.0.0", "@hint/parser-javascript": "^1.0.1",
"@hint/utils-tests-helpers": "^1.0.1",
"@types/debug": "0.0.30", "@types/debug": "0.0.30",
"@types/node": "^9.4.6", "@types/node": "^9.4.6",
"async-retry": "^1.2.1", "async-retry": "^1.2.1",
@ -34,7 +35,7 @@
"nyc": "^11.4.1", "nyc": "^11.4.1",
"on-headers": "^1.0.1", "on-headers": "^1.0.1",
"rimraf": "^2.6.2", "rimraf": "^2.6.2",
"sonarwhal": "^1.0.0", "hint": "^3.4.0",
"typescript": "^2.6.2", "typescript": "^2.6.2",
"typescript-eslint-parser": "^14.0.0" "typescript-eslint-parser": "^14.0.0"
}, },
@ -45,19 +46,19 @@
"dist/src", "dist/src",
"npm-shrinkwrap.json" "npm-shrinkwrap.json"
], ],
"homepage": "https://sonarwhal.com", "homepage": "https://webhint.io",
"keywords": [ "keywords": [
"sonarwhal", "webhint",
"sonarwhal-rule", "webhint-hint",
"jsll", "jsll",
"jsll-rule" "jsll-hint"
], ],
"license": "Apache-2.0", "license": "Apache-2.0",
"main": "dist/src/index.js", "main": "dist/src/index.js",
"name": "sonarwhal-rule-jsll", "name": "webhint-hint-jsll",
"peerDependencies": { "peerDependencies": {
"sonarwhal": "^1.0.0", "hint": "^3.4.0",
"@sonarwhal/parser-javascript": "^2.0.0" "@hint/parser-javascript": "^1.0.1"
}, },
"scripts": { "scripts": {
"build": "npm run clean && npm-run-all build:*", "build": "npm run clean && npm-run-all build:*",
@ -73,8 +74,8 @@
"watch:assets": "npm run build:assets -- -w --no-initial", "watch:assets": "npm run build:assets -- -w --no-initial",
"watch:test": "ava --watch", "watch:test": "ava --watch",
"watch:ts": "npm run build:ts -- --watch", "watch:ts": "npm run build:ts -- --watch",
"sonarwhal": "node node_modules/sonarwhal/dist/src/bin/sonarwhal.js" "hint": "node node_modules/hint/dist/src/bin/hint.js"
}, },
"repository": "Microsoft/sonarwhal-rules-microsoft", "repository": "Microsoft/webhint-hints-microsoft",
"version": "1.0.1" "version": "2.0.0"
} }

Просмотреть файл

@ -2,12 +2,12 @@
* @fileoverview Validate the use of `awa.init` to initialize the JSLL script. * @fileoverview Validate the use of `awa.init` to initialize the JSLL script.
*/ */
import { Category } from 'sonarwhal/dist/src/lib/enums/category'; import { Category } from 'hint/dist/src/lib/enums/category';
import { RuleContext } from 'sonarwhal/dist/src/lib/rule-context'; import { HintContext } from 'hint/dist/src/lib/hint-context';
import { IRule, RuleMetadata, IAsyncHTMLElement, ElementFound } from 'sonarwhal/dist/src/lib/types'; import { IHint, HintMetadata, IAsyncHTMLElement, ElementFound } from 'hint/dist/src/lib/types';
import { ScriptParse } from '@sonarwhal/parser-javascript/dist/src/ScriptParse'; import { ScriptParse } from '@hint/parser-javascript/dist/src/types';
import { debug as d } from 'sonarwhal/dist/src/lib/utils/debug'; import { debug as d } from 'hint/dist/src/lib/utils/debug';
import { RuleScope } from 'sonarwhal/dist/src/lib/enums/rulescope'; import { HintScope } from 'hint/dist/src/lib/enums/hintscope';
import { isPotentialInitScript, configIsDefined } from '../validator'; import { isPotentialInitScript, configIsDefined } from '../validator';
import { isJsllDir, isInitCode } from '../utils'; import { isJsllDir, isInitCode } from '../utils';
@ -22,18 +22,18 @@ const debug: debug.IDebugger = d(__filename);
* ------------------------------------------------------------------------------ * ------------------------------------------------------------------------------
*/ */
export default class JsllAwaInitRule implements IRule { export default class JsllAwaInitRule implements IHint {
public static readonly meta: RuleMetadata = { public static readonly meta: HintMetadata = {
docs: { docs: {
category: Category.other, category: Category.other,
description: `Validate the use of 'awa.init' to initialize the JSLL script.` description: `Validate the use of 'awa.init' to initialize the JSLL script.`
}, },
id: 'jsll/awa-init', id: 'jsll/awa-init',
schema: [], schema: [],
scope: RuleScope.any scope: HintScope.any
} }
public constructor(context: RuleContext) { public constructor(context: HintContext) {
const linter = new Linter(); const linter = new Linter();
/** States available. */ /** States available. */
@ -177,6 +177,6 @@ export default class JsllAwaInitRule implements IRule {
context.on('element::body', enterBody); context.on('element::body', enterBody);
context.on('element::head', enterHead); context.on('element::head', enterHead);
context.on('element::script', enterScript); context.on('element::script', enterScript);
context.on('parse::javascript', validateScript); context.on('parse::javascript::end', validateScript);
} }
} }

Просмотреть файл

@ -1,13 +1,13 @@
/** /**
* @fileoverview This rule confirms that JSLL script is included in the page * @fileoverview This rule confirms that JSLL script is included in the page
*/ */
import { Category } from 'sonarwhal/dist/src/lib/enums/category'; import { Category } from 'hint/dist/src/lib/enums/category';
import { RuleContext } from 'sonarwhal/dist/src/lib/rule-context'; import { HintContext } from 'hint/dist/src/lib/hint-context';
import { IAsyncHTMLElement, IRule, ElementFound, Severity, RuleMetadata } from 'sonarwhal/dist/src/lib/types'; import { IAsyncHTMLElement, IHint, ElementFound, Severity, HintMetadata } from 'hint/dist/src/lib/types';
import { normalizeString } from 'sonarwhal/dist/src/lib/utils/misc'; import normalizeString from 'hint/dist/src/lib/utils/misc/normalize-string';
import { isJsllDir } from '../utils'; import { isJsllDir } from '../utils';
import { RuleScope } from 'sonarwhal/dist/src/lib/enums/rulescope'; import { HintScope } from 'hint/dist/src/lib/enums/hintscope';
/* /*
* ------------------------------------------------------------------------------ * ------------------------------------------------------------------------------
@ -15,18 +15,18 @@ import { RuleScope } from 'sonarwhal/dist/src/lib/enums/rulescope';
* ------------------------------------------------------------------------------ * ------------------------------------------------------------------------------
*/ */
export default class JsllScriptIncludedRule implements IRule { export default class JsllScriptIncludedRule implements IHint {
public static readonly meta: RuleMetadata = { public static readonly meta: HintMetadata = {
docs: { docs: {
category: Category.other, category: Category.other,
description: `This rule confirms that JSLL script is included in the head of the page` description: `This rule confirms that JSLL script is included in the head of the page`
}, },
id: 'jsll/script-included', id: 'jsll/script-included',
schema: [], schema: [],
scope: RuleScope.any scope: HintScope.any
} }
public constructor(context: RuleContext) { public constructor(context: HintContext) {
// Messages. // Messages.
const noScriptInHeadMsg: string = `No JSLL script was included in the <head> tag.`; const noScriptInHeadMsg: string = `No JSLL script was included in the <head> tag.`;
const redundantScriptInHeadMsg: string = `More than one JSLL scripts were included in the <head> tag.`; const redundantScriptInHeadMsg: string = `More than one JSLL scripts were included in the <head> tag.`;

Просмотреть файл

@ -1,5 +1,5 @@
import { IAsyncHTMLElement } from 'sonarwhal/dist/src/lib/types'; import { IAsyncHTMLElement } from 'hint/dist/src/lib/types';
import { normalizeString } from 'sonarwhal/dist/src/lib/utils/misc'; import normalizeString from 'hint/dist/src/lib/utils/misc/normalize-string';
const jsllDir = `az725175.vo.msecnd.net/scripts/jsll-`; const jsllDir = `az725175.vo.msecnd.net/scripts/jsll-`;

Просмотреть файл

@ -2,16 +2,15 @@
* @fileoverview Validate the required config properties. * @fileoverview Validate the required config properties.
*/ */
import { Category } from 'sonarwhal/dist/src/lib/enums/category'; import { Category } from 'hint/dist/src/lib/enums/category';
import { RuleContext } from 'sonarwhal/dist/src/lib/rule-context'; import { HintContext } from 'hint/dist/src/lib/hint-context';
import { IRule, ScanEnd, RuleMetadata } from 'sonarwhal/dist/src/lib/types'; import { IHint, ScanEnd, HintMetadata } from 'hint/dist/src/lib/types';
// import { ScriptParse } from 'sonarwhal/dist/src/lib/parsers/javascript/types'; import { ScriptParse } from '@hint/parser-javascript/dist/src/types';
import { ScriptParse } from '@sonarwhal/parser-javascript/dist/src/scriptParse'; import { debug as d } from 'hint/dist/src/lib/utils/debug';
import { debug as d } from 'sonarwhal/dist/src/lib/utils/debug';
import { isPotentialInitScript, validateNodeProps, configProps } from '../validator'; import { isPotentialInitScript, validateNodeProps, configProps } from '../validator';
import { isObject } from '../utils'; import { isObject } from '../utils';
import { RuleScope } from 'sonarwhal/dist/src/lib/enums/rulescope'; import { HintScope } from 'hint/dist/src/lib/enums/hintscope';
const debug: debug.IDebugger = d(__filename); const debug: debug.IDebugger = d(__filename);
@ -52,18 +51,18 @@ const generateScript = (callInitCode) => {
}; };
export default class JsllValidateConfigRule implements IRule { export default class JsllValidateConfigRule implements IHint {
public static readonly meta: RuleMetadata = { public static readonly meta: HintMetadata = {
docs: { docs: {
category: Category.other, category: Category.other,
description: `Validate the required config properties.` description: `Validate the required config properties.`
}, },
id: 'jsll/validate-config', id: 'jsll/validate-config',
schema: [], schema: [],
scope: RuleScope.any scope: HintScope.any
} }
public constructor(context: RuleContext) { public constructor(context: HintContext) {
/** Cache for the init code. */ /** Cache for the init code. */
let script = ''; let script = '';
/** Cache for the init code resource. */ /** Cache for the init code resource. */
@ -137,7 +136,7 @@ export default class JsllValidateConfigRule implements IRule {
}); });
}; };
context.on('parse::javascript', populateScript); context.on('parse::javascript::end', populateScript);
context.on('scan::end', evaluate); context.on('scan::end', evaluate);
} }
} }

Просмотреть файл

9
hints/jsll/src/index.ts Normal file
Просмотреть файл

@ -0,0 +1,9 @@
/**
* @fileoverview jsll the initialization of the JSLL script.
*/
module.exports = {
'awa-init': require('./hints/awa-init/awa-init'),
'script-included': require('./hints/script-included/script-included'),
'validate-config': require('./hints/validate-config/validate-config')
};

Просмотреть файл

@ -1,10 +1,10 @@
import { generateHTMLPage } from 'sonarwhal/dist/tests/helpers/misc'; import generateHTMLPage from 'hint/dist/src/lib/utils/misc/generate-html-page';
import { RuleTest } from 'sonarwhal/dist/tests/helpers/rule-test-type'; import { HintTest } from '@hint/utils-tests-helpers/dist/src/hint-test-type';
import * as ruleRunner from 'sonarwhal/dist/tests/helpers/rule-runner'; import * as hintRunner from '@hint/utils-tests-helpers/dist/src/hint-runner';
import { code, scriptWrapper } from '../helpers/common'; import { code, scriptWrapper } from '../helpers/common';
const ruleName = 'jsll/awa-init'; const hintName = 'jsll/awa-init';
const messages = { const messages = {
noInit: `JSLL is not initialized with "awa.init(config)" function in <head>. Initialization script should be placed immediately after JSLL script.`, noInit: `JSLL is not initialized with "awa.init(config)" function in <head>. Initialization script should be placed immediately after JSLL script.`,
notCallASAP: `"awa.init" is not called as soon as possible.`, notCallASAP: `"awa.init" is not called as soon as possible.`,
@ -13,7 +13,7 @@ const messages = {
undefinedConfig: `The variable passed to "awa.init" is not defined.` undefinedConfig: `The variable passed to "awa.init" is not defined.`
}; };
const tests: Array<RuleTest> = [ const tests: Array<HintTest> = [
{ {
// Validate init should still run even if the JSLL script link is not included. // Validate init should still run even if the JSLL script link is not included.
name: `The JSLL script itself was not included`, name: `The JSLL script itself was not included`,
@ -81,4 +81,4 @@ const tests: Array<RuleTest> = [
} }
]; ];
ruleRunner.testRule(ruleName, tests, { parsers: ['javascript'] }); hintRunner.testHint(hintName, tests, { parsers: ['javascript'] });

Просмотреть файл

Просмотреть файл

@ -1,8 +1,8 @@
import { generateHTMLPage } from 'sonarwhal/dist/tests/helpers/misc'; import generateHTMLPage from 'hint/dist/src/lib/utils/misc/generate-html-page';
import { RuleTest } from 'sonarwhal/dist/tests/helpers/rule-test-type'; import { HintTest } from '@hint/utils-tests-helpers/dist/src/hint-test-type';
import * as ruleRunner from 'sonarwhal/dist/tests/helpers/rule-runner'; import * as hintRunner from '@hint/utils-tests-helpers/dist/src/hint-runner';
const ruleName = 'jsll/script-included'; const hintName = 'jsll/script-included';
const baseUrl: string = `https://az725175.vo.msecnd.net/scripts/jsll`; const baseUrl: string = `https://az725175.vo.msecnd.net/scripts/jsll`;
const simpleVersionLink: string = `${baseUrl}-4.js`; const simpleVersionLink: string = `${baseUrl}-4.js`;
const specifiedVersionLink: string = `${baseUrl}-4.2.1.js`; const specifiedVersionLink: string = `${baseUrl}-4.2.1.js`;
@ -28,7 +28,7 @@ const warningScriptVersionMsg = `Use the latest release of JSLL with 'jsll-4.js'
const invalidScriptVersionMsg = `The jsll script versioning is not valid.`; const invalidScriptVersionMsg = `The jsll script versioning is not valid.`;
const wrongScriptOrderMsg = `The JSLL script isn't placed prior to other scripts.`; const wrongScriptOrderMsg = `The JSLL script isn't placed prior to other scripts.`;
const tests: Array<RuleTest> = [ const tests: Array<HintTest> = [
{ {
name: 'JSLL script locates in the <head> tag and has the recommended version format', name: 'JSLL script locates in the <head> tag and has the recommended version format',
serverConfig: generateHTMLPage(generateScript(simpleVersionLink)) serverConfig: generateHTMLPage(generateScript(simpleVersionLink))
@ -64,4 +64,4 @@ const tests: Array<RuleTest> = [
} }
]; ];
ruleRunner.testRule(ruleName, tests); hintRunner.testHint(hintName, tests);

Просмотреть файл

@ -1,10 +1,10 @@
import { generateHTMLPage } from 'sonarwhal/dist/tests/helpers/misc'; import generateHTMLPage from 'hint/dist/src/lib/utils/misc/generate-html-page';
import { RuleTest } from 'sonarwhal/dist/tests/helpers/rule-test-type'; import { HintTest } from '@hint/utils-tests-helpers/dist/src/hint-test-type';
import * as ruleRunner from 'sonarwhal/dist/tests/helpers/rule-runner'; import * as hintRunner from '@hint/utils-tests-helpers/dist/src/hint-runner';
import { code, deleteProp, modifyConfigVal, scriptWrapper } from '../helpers/common'; import { code, deleteProp, modifyConfigVal, scriptWrapper } from '../helpers/common';
const ruleName = 'jsll/validate-config'; const hintName = 'jsll/validate-config';
const messages = { const messages = {
invalidAppId: `The "appId" must be a non-empty string.`, invalidAppId: `The "appId" must be a non-empty string.`,
invalidAutoCapture: `The "autoCapture" property is not a valid object.`, invalidAutoCapture: `The "autoCapture" property is not a valid object.`,
@ -38,7 +38,7 @@ const stringPropertyConfig = {
useShortNameForContentBlob: true useShortNameForContentBlob: true
}; };
const tests: Array<RuleTest> = [ const tests: Array<HintTest> = [
{ {
name: `The JSLL script was not included, but the init script is present and the config is valid`, name: `The JSLL script was not included, but the init script is present and the config is valid`,
serverConfig: generateHTMLPage(`${scriptWrapper(`var config=${JSON.stringify(code.perfectConfig)};`, code.initConfig, false)}`) serverConfig: generateHTMLPage(`${scriptWrapper(`var config=${JSON.stringify(code.perfectConfig)};`, code.initConfig, false)}`)
@ -151,4 +151,4 @@ const tests: Array<RuleTest> = [
} }
]; ];
ruleRunner.testRule(ruleName, tests, { parsers: ['javascript'] }); hintRunner.testHint(hintName, tests, { parsers: ['javascript'] });

Просмотреть файл

18479
rules/chisel/package-lock.json сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1 +0,0 @@
module.exports = { chisel: require('./rule') };

Просмотреть файл

@ -1 +0,0 @@
{"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\CHANGELOG.md":{"size":32,"mtime":1520713992111,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\CHANGELOG.md","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\README.md":{"size":4750,"mtime":1520714799802,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\README.md","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\index.ts":{"size":295,"mtime":1520713992153,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\index.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\awa-init\\awa-init.ts":{"size":7027,"mtime":1520713992166,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\awa-init\\awa-init.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\script-included\\script-included.ts":{"size":4100,"mtime":1520713992174,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\script-included\\script-included.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\utils.ts":{"size":2358,"mtime":1517938907986,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\utils.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\validate-config\\validate-config.ts":{"size":4750,"mtime":1520713992186,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\validate-config\\validate-config.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\validator.ts":{"size":6087,"mtime":1520713992190,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\src\\rules\\validator.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\tests\\awa-init\\test.ts":{"size":4269,"mtime":1520713992190,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\tests\\awa-init\\test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\tests\\helpers\\common.ts":{"size":3175,"mtime":1517942583261,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\tests\\helpers\\common.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\tests\\script-included\\test.ts":{"size":3022,"mtime":1520713992206,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\tests\\script-included\\test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}},"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\tests\\validate-config\\test.ts":{"size":7774,"mtime":1520713992206,"hashOfConfig":"1h35see","results":{"filePath":"C:\\projects\\Microsoft\\sonarwhal-rules-microsoft\\rules\\jsll\\tests\\validate-config\\test.ts","messages":[],"errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0}}}

20660
rules/jsll/package-lock.json сгенерированный

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1,9 +0,0 @@
/**
* @fileoverview jsll the initialization of the JSLL script.
*/
module.exports = {
'awa-init': require('./rules/awa-init/awa-init'),
'script-included': require('./rules/script-included/script-included'),
'validate-config': require('./rules/validate-config/validate-config')
};