@markuplint/rules
Advanced tools
@@ -8,5 +8,5 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
const message = messages('Duplicate {0}', 'attribute name'); | ||
const message = translate('Duplicate {0}', 'attribute name'); | ||
await document.walkOn('Element', async (node) => { | ||
@@ -13,0 +13,0 @@ const attrNameStack = []; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const ml_core_1 = require("@markuplint/ml-core"); | ||
const alwaysMsg = 'Always insert {0} after {1} of {2}'; | ||
const neverMsg = 'Never insert {0} after {1} of {2}'; | ||
exports.default = ml_core_1.createRule({ | ||
@@ -9,5 +11,4 @@ name: 'attr-equal-space-after', | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
// const message = messages('error'); | ||
await document.walkOn('Element', async (node) => { | ||
@@ -21,5 +22,7 @@ for (const attr of node.attributes) { | ||
let isBad = false; | ||
let rawMessage; | ||
switch (node.rule.value) { | ||
case 'always': { | ||
isBad = !hasSpace; | ||
rawMessage = alwaysMsg; | ||
break; | ||
@@ -29,2 +32,3 @@ } | ||
isBad = hasSpace; | ||
rawMessage = neverMsg; | ||
break; | ||
@@ -35,2 +39,3 @@ } | ||
isBad = !hasSpace || hasLineBreak; | ||
rawMessage = alwaysMsg; | ||
break; | ||
@@ -40,2 +45,3 @@ } | ||
isBad = hasSpace && !hasLineBreak; | ||
rawMessage = neverMsg; | ||
break; | ||
@@ -47,3 +53,3 @@ } | ||
severity: node.rule.severity, | ||
message: node.rule.value, | ||
message: translate(rawMessage, 'space', 'equal sign', 'attribute'), | ||
line: attr.spacesBeforeEqual.startLine, | ||
@@ -50,0 +56,0 @@ col: attr.spacesBeforeEqual.startCol, |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const ml_core_1 = require("@markuplint/ml-core"); | ||
const alwaysMsg = 'Always insert {0} before {1} of {2}'; | ||
const neverMsg = 'Never insert {0} before {1} of {2}'; | ||
exports.default = ml_core_1.createRule({ | ||
@@ -9,5 +11,4 @@ name: 'attr-equal-space-before', | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
// const message = messages('error'); | ||
await document.walkOn('Element', async (node) => { | ||
@@ -21,5 +22,7 @@ for (const attr of node.attributes) { | ||
let isBad = false; | ||
let rawMessage; | ||
switch (node.rule.value) { | ||
case 'always': { | ||
isBad = !hasSpace; | ||
rawMessage = alwaysMsg; | ||
break; | ||
@@ -29,2 +32,3 @@ } | ||
isBad = hasSpace; | ||
rawMessage = neverMsg; | ||
break; | ||
@@ -35,2 +39,3 @@ } | ||
isBad = !hasSpace || hasLineBreak; | ||
rawMessage = alwaysMsg; | ||
break; | ||
@@ -40,2 +45,3 @@ } | ||
isBad = hasSpace && !hasLineBreak; | ||
rawMessage = neverMsg; | ||
break; | ||
@@ -47,3 +53,3 @@ } | ||
severity: node.rule.severity, | ||
message: node.rule.value, | ||
message: translate(rawMessage, 'space', 'equal sign', 'attribute'), | ||
line: attr.spacesBeforeEqual.startLine, | ||
@@ -50,0 +56,0 @@ col: attr.spacesBeforeEqual.startCol, |
@@ -12,5 +12,4 @@ "use strict"; | ||
}, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
// const message = messages('error'); | ||
await document.walkOn('Element', async (node) => { | ||
@@ -25,3 +24,3 @@ const attrs = node.attributes; | ||
severity: node.rule.severity, | ||
message: messages('スペースが必要です'), | ||
message: translate('Required {0}', 'space'), | ||
line: attr.spacesBeforeName.startLine, | ||
@@ -37,3 +36,3 @@ col: attr.spacesBeforeName.startCol, | ||
severity: node.rule.severity, | ||
message: messages('改行はしないでください'), | ||
message: translate('Never {0}', 'break line'), | ||
line: attr.spacesBeforeName.startLine, | ||
@@ -49,3 +48,3 @@ col: attr.spacesBeforeName.startCol, | ||
severity: node.rule.severity, | ||
message: messages('改行してください'), | ||
message: translate('Insert {0}', 'line break'), | ||
line: attr.spacesBeforeName.startLine, | ||
@@ -59,3 +58,3 @@ col: attr.spacesBeforeName.startCol, | ||
severity: node.rule.severity, | ||
message: messages('スペースは{0}つにしてください', node.rule.option.width), | ||
message: translate('{0} should be {1}', 'Space', node.rule.option.width), | ||
line: attr.spacesBeforeName.startLine, | ||
@@ -62,0 +61,0 @@ col: attr.spacesBeforeName.startCol, |
@@ -13,6 +13,6 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
await document.walkOn('Element', async (node) => { | ||
const message = messages('{0} is must {1} on {2}', 'Attribute value', 'quote', `${node.rule.value} quotation mark`); | ||
const message = translate('{0} is must {1} on {2}', 'Attribute value', 'quote', `${node.rule.value} quotation mark`); | ||
for (const attr of node.attributes) { | ||
@@ -19,0 +19,0 @@ if (attr.equal.raw === '') { |
@@ -9,3 +9,3 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
@@ -16,3 +16,3 @@ await document.walkOn('Element', async (node) => { | ||
const cases = node.rule.value === 'no-upper' ? 'lower' : 'upper'; | ||
const message = messages(`{0} of {1} ${ms} be {2}`, 'Attribute name', 'HTML', `${cases}case`); | ||
const message = translate(`{0} of {1} ${ms} be {2}`, 'Attribute name', 'HTML elements', `${cases}case`); | ||
if (node.namespaceURI === 'http://www.w3.org/1999/xhtml') { | ||
@@ -19,0 +19,0 @@ if (node.attributes) { |
@@ -10,3 +10,3 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
@@ -20,3 +20,3 @@ await document.walk(async (node) => { | ||
const deny = node.rule.value === 'lower' ? /[A-Z]/ : /[a-z]/; | ||
const message = messages(`{0} of {1} ${ms} be {2}`, 'Tag name', 'HTML element', `${node.rule.value}case`); | ||
const message = translate(`{0} of {1} ${ms} be {2}`, 'Tag name', 'HTML elements', `${node.rule.value}case`); | ||
if (deny.test(node.nodeName)) { | ||
@@ -23,0 +23,0 @@ reports.push({ |
@@ -10,3 +10,3 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
@@ -20,3 +20,3 @@ const targetNodes = []; | ||
const ms = severity === 'error' ? 'must' : 'should'; | ||
const message = messages(`{0} ${ms} {1}`, 'Illegal characters', 'escape in character reference'); | ||
const message = translate(`{0} ${ms} {1}`, 'Illegal characters', 'escape in character reference'); | ||
targetNodes.push({ | ||
@@ -33,3 +33,3 @@ severity, | ||
const ms = severity === 'error' ? 'must' : 'should'; | ||
const message = messages(`{0} ${ms} {1}`, 'Illegal characters', 'escape in character reference'); | ||
const message = translate(`{0} ${ms} {1}`, 'Illegal characters', 'escape in character reference'); | ||
for (const attr of node.attributes) { | ||
@@ -36,0 +36,0 @@ if (!attr.value) { |
@@ -9,5 +9,4 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
// const message = messages(`{0} of {1} ${ms} be {2}`, 'Attribute name', 'HTML', `${config.value}case`); | ||
await document.walkOn('Element', async (node) => { | ||
@@ -24,3 +23,3 @@ if (node.rule.value) { | ||
severity: node.rule.severity, | ||
message: `"${className}" class name is unmatched patterns ("${classPatterns.join('" or "')}")`, | ||
message: translate('{0} {1} is unmatched patterns ({2})', `"${className}"`, 'class name', `"${classPatterns.join('", "')}"`), | ||
line: attr.name.startLine, | ||
@@ -27,0 +26,0 @@ col: attr.name.startCol, |
@@ -13,3 +13,3 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
@@ -28,3 +28,3 @@ await document.walkOn('Element', async (element) => { | ||
if (attrSpec.deprecated || attrSpec.obsolete) { | ||
const message = messages(`"${name}" {0} is {1}`, 'attribute', attrSpec.deprecated ? 'deprecated' : 'obsolete'); | ||
const message = translate('The {0} {1} is {2}', name, 'attribute', attrSpec.deprecated ? 'deprecated' : 'obsolete'); | ||
reports.push({ | ||
@@ -31,0 +31,0 @@ severity: element.rule.severity, |
@@ -13,5 +13,5 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
const message = messages('{0} is {1}', 'Element', 'deprecated'); | ||
const message = translate('{0} is {1}', 'Element', 'deprecated'); | ||
await document.walkOn('Element', async (element) => { | ||
@@ -18,0 +18,0 @@ if (element.isForeignElement) { |
@@ -10,3 +10,3 @@ "use strict"; | ||
}, | ||
async verify(document, messages, rule) { | ||
async verify(document, translate, rule) { | ||
if (document.isFragment) { | ||
@@ -20,3 +20,3 @@ return []; | ||
severity: rule.severity, | ||
message: messages('Missing doctype'), | ||
message: translate('Required {0}', 'doctype'), | ||
line: 1, | ||
@@ -32,3 +32,3 @@ col: 1, | ||
severity: rule.severity, | ||
message: messages('Never declarate obsolete Doctype'), | ||
message: translate('Never {0} {1}', 'declarate', 'obsolete doctype'), | ||
line: doctype.startLine, | ||
@@ -35,0 +35,0 @@ col: doctype.startCol, |
@@ -8,5 +8,5 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
const message = messages('Duplicate {0}', 'attribute id value'); | ||
const message = translate('Duplicate {0}', 'attribute id value'); | ||
const idStack = []; | ||
@@ -13,0 +13,0 @@ await document.walkOn('Element', async (node) => { |
@@ -12,3 +12,3 @@ "use strict"; | ||
}, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
@@ -36,6 +36,6 @@ await document.walk(async (node) => { | ||
node.indentation.width % node.rule.value) { | ||
spec = messages('{0} width spaces', `${node.rule.value}`); | ||
spec = translate('{0} width spaces', `${node.rule.value}`); | ||
} | ||
if (spec) { | ||
const message = messages(`{0} ${ms} be {1}`, 'Indentation', spec); | ||
const message = translate(`{0} ${ms} be {1}`, 'Indentation', spec); | ||
reports.push({ | ||
@@ -76,3 +76,3 @@ severity: node.rule.severity, | ||
if (diff !== 0) { | ||
const message = messages(diff < 1 ? 'インデントを下げてください' : 'インデントを上げてください'); | ||
const message = translate(diff < 1 ? 'Should increase indentation' : 'Should decrease indentation'); | ||
reports.push({ | ||
@@ -89,3 +89,3 @@ severity: node.rule.severity, | ||
if (diff !== expectedWidth) { | ||
const message = messages(diff < 1 ? 'インデントを下げてください' : 'インデントを上げてください'); | ||
const message = translate(diff < 1 ? 'Should increase indentation' : 'Should decrease indentation'); | ||
reports.push({ | ||
@@ -124,3 +124,3 @@ severity: node.rule.severity, | ||
if (startTagIndentationWidth !== endTagIndentationWidth) { | ||
const message = messages('終了タグと開始タグのインデント位置が揃っていません。'); | ||
const message = translate('Start tag and end tag indentation should align'); | ||
reports.push({ | ||
@@ -196,3 +196,2 @@ severity: closeTag.rule.severity, | ||
if (diff !== 0) { | ||
// const message = messages(diff < 1 ? `インデントを下げてください` : `インデントを上げてください`); | ||
// const raw = node.indentation.raw; | ||
@@ -209,3 +208,2 @@ const fixed = parent.indentation.raw; | ||
if (diff !== expectedWidth) { | ||
// const message = messages(diff < 1 ? `インデントを下げてください` : `インデントを上げてください`); | ||
// const raw = node.indentation.raw; | ||
@@ -212,0 +210,0 @@ const fixed = (node.rule.value === 'tab' ? '\t' : ' ').repeat(parentIndentWidth + expectedWidth); |
@@ -6,3 +6,2 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const async_attr_in_script_1 = __importDefault(require("./async-attr-in-script")); | ||
const attr_duplication_1 = __importDefault(require("./attr-duplication")); | ||
@@ -27,3 +26,2 @@ const attr_equal_space_after_1 = __importDefault(require("./attr-equal-space-after")); | ||
exports.default = [ | ||
async_attr_in_script_1.default, | ||
attr_duplication_1.default, | ||
@@ -30,0 +28,0 @@ attr_equal_space_after_1.default, |
@@ -22,3 +22,3 @@ "use strict"; | ||
}, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
if (document.isFragment) { | ||
@@ -84,3 +84,3 @@ return []; | ||
severity: el.rule.severity, | ||
message: messages(`The ${role} landmark should be top level landmarks`), | ||
message: translate('{0} should be {1}', role, 'top level'), | ||
line: el.startLine, | ||
@@ -109,3 +109,3 @@ col: el.startCol, | ||
severity: el.rule.severity, | ||
message: messages(`Should have a unique label because ${role} landmark role is used more than once on a web page`), | ||
message: translate('Should have a unique label because {0} landmarks were markup more than once on a page', role), | ||
line: el.startLine, | ||
@@ -112,0 +112,0 @@ col: el.startCol, |
@@ -15,3 +15,3 @@ "use strict"; | ||
defaultOptions: [], | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
@@ -30,3 +30,3 @@ let idCounter = 0; | ||
severity: node.rule.severity, | ||
message: messages(`Invalid structure: "${node.nodeName}" element must have an ancestor "${spec.ancestor}"`), | ||
message: translate('The {0} element must be descendant of the {1} element', node.nodeName, spec.ancestor), | ||
line: node.startLine, | ||
@@ -56,3 +56,3 @@ col: node.startCol, | ||
severity: node.rule.severity, | ||
message: messages(`Invalid content in "${node.nodeName}" element on the HTML spec`), | ||
message: translate('Invalid content of the {0} element in {1}', node.nodeName, 'the HTML specification'), | ||
line: node.startLine, | ||
@@ -79,3 +79,3 @@ col: node.startCol, | ||
severity: node.rule.severity, | ||
message: messages(`Invalid content in "${node.nodeName}" element on the HTML spec`), | ||
message: translate('Invalid content of the {0} element in {1}', node.nodeName, 'the HTML specification'), | ||
line: node.startLine, | ||
@@ -104,3 +104,3 @@ col: node.startCol, | ||
severity: node.rule.severity, | ||
message: messages(`Invalid content in "${node.nodeName}" element on rule settings`), | ||
message: translate('Invalid content of the {0} element in {1}', node.nodeName, 'settings'), | ||
line: node.startLine, | ||
@@ -107,0 +107,0 @@ col: node.startCol, |
@@ -9,3 +9,3 @@ "use strict"; | ||
defaultOptions: null, | ||
async verify(document, messages) { | ||
async verify(document, translate) { | ||
const reports = []; | ||
@@ -16,3 +16,3 @@ await document.walkOn('Element', async (node) => { | ||
if (!node.hasAttribute(attr)) { | ||
const message = messages('Required {0} on {1}', `'${attr}'`, `'<${node.nodeName}>'`); | ||
const message = translate('Required {0} on {1}', `'${attr}'`, `'<${node.nodeName}>'`); | ||
reports.push({ | ||
@@ -19,0 +19,0 @@ severity: node.rule.severity, |
@@ -11,3 +11,3 @@ "use strict"; | ||
}, | ||
async verify(document, messages, globalRule) { | ||
async verify(document, translate, globalRule) { | ||
const reports = []; | ||
@@ -24,3 +24,3 @@ const h1Stack = []; | ||
if (h1Stack.length === 0) { | ||
const message = messages('Missing {0}', 'h1 element'); | ||
const message = translate('Missing the {0} {1}', 'h1', 'element'); | ||
reports.push({ | ||
@@ -35,3 +35,3 @@ severity: globalRule.severity, | ||
else if (globalRule.option['expected-once'] && h1Stack.length > 1) { | ||
const message = messages('Duplicate {0}', 'h1 element'); | ||
const message = translate('Duplicate the {0} {1}', 'h1', 'element'); | ||
reports.push({ | ||
@@ -38,0 +38,0 @@ severity: globalRule.severity, |
{ | ||
"name": "@markuplint/rules", | ||
"version": "1.0.0-alpha.26", | ||
"version": "1.0.0-alpha.27", | ||
"description": "Rules for markuplint", | ||
@@ -20,9 +20,9 @@ "repository": "git@github.com:markuplint/markuplint.git", | ||
"dependencies": { | ||
"@markuplint/html-ls": "^1.0.0-alpha.18", | ||
"@markuplint/html-ls": "^1.0.0-alpha.19", | ||
"@markuplint/ml-spec": "^1.0.0-alpha.7" | ||
}, | ||
"devDependencies": { | ||
"@markuplint/ml-core": "^1.0.0-alpha.19" | ||
"@markuplint/ml-core": "^1.0.0-alpha.20" | ||
}, | ||
"gitHead": "523469cb7beeb81553c127095805bf5358848889" | ||
"gitHead": "29707f9a60778eba2343c472316767c522a41ed4" | ||
} |
@@ -69,8 +69,2 @@ # @markuplint/rules | ||
### Performance | ||
| Avaiable | Docs | Docs(ja) | Rule | Fixable | | ||
| -------- | ---- | -------- | --------------------------------------------------- | ------- | | ||
| ✅ | ✅ | ✅ | [async-attr-in-script](./src/async-attr-in-script/) | | ||
## Install | ||
@@ -77,0 +71,0 @@ |
Sorry, the diff of this file is not supported yet
1868
0.32%273550
-0.79%93
-6.06%