From 7ed4579922c4658253985a0353ae5825008c374f Mon Sep 17 00:00:00 2001 From: Titus Wormer Date: Sat, 20 Jun 2015 17:35:30 +0200 Subject: [PATCH] Add checkbox-character-style rule New rule which warns when the checkbox character is invalid or inconsistent. Closes GH-4. --- doc/rules.md | 44 +++ lib/rules/checkbox-character-style.js | 183 +++++++++++ lib/rules/index.js | 1 + mdast-lint.js | 309 ++++++++++++++---- mdast-lint.min.js | 2 +- package.json | 2 +- .../checkbox-character-style-lower-x.md | 7 + .../checkbox-character-style-space.md | 7 + test/fixtures/checkbox-character-style-tab.md | 7 + .../checkbox-character-style-upper-x.md | 7 + test/index.js | 77 +++++ 11 files changed, 581 insertions(+), 65 deletions(-) create mode 100644 lib/rules/checkbox-character-style.js create mode 100644 test/fixtures/checkbox-character-style-lower-x.md create mode 100644 test/fixtures/checkbox-character-style-space.md create mode 100644 test/fixtures/checkbox-character-style-tab.md create mode 100644 test/fixtures/checkbox-character-style-upper-x.md diff --git a/doc/rules.md b/doc/rules.md index 34a4cdfa..7d0f62d2 100644 --- a/doc/rules.md +++ b/doc/rules.md @@ -11,6 +11,7 @@ fix their warnings. * [externals](#externals) * [reset](#reset) * [blockquote-indentation](#blockquote-indentation) + * [checkbox-character-style](#checkbox-character-style) * [code-block-style](#code-block-style) * [definition-case](#definition-case) * [definition-spacing](#definition-spacing) @@ -131,6 +132,49 @@ Options: `boolean`, default: `false`. The default value, `consistent`, detects the first used indentation and will warn when other blockquotes use a different indentation. +### checkbox-character-style + +```md + + + + - [x] List item + - [x] List item + + + - [X] List item + - [X] List item + + + - [ ] List item + - [ ] List item + + + - [»···] List item + - [»···] List item + + + - [x] List item + - [X] List item + - [ ] List item + - [»···] List item +``` + + Warn when list item checkboxes violate a given style. + + The default value, `consistent`, detects the first used checked + and unchecked checkbox styles, and will warn when a subsequent + checkboxes uses a different style. + + These values can also be passed in as an object, such as: + +```json +{ + "checked": 'x', + "unchecked": ' ' +} +``` + ### code-block-style ````md diff --git a/lib/rules/checkbox-character-style.js b/lib/rules/checkbox-character-style.js new file mode 100644 index 00000000..fcc1cd9b --- /dev/null +++ b/lib/rules/checkbox-character-style.js @@ -0,0 +1,183 @@ +/** + * @author Titus Wormer + * @copyright 2015 Titus Wormer. All rights reserved. + * @module checkbox-character-style + * @fileoverview + * Warn when list item checkboxes violate a given style. + * + * The default value, `consistent`, detects the first used checked + * and unchecked checkbox styles, and will warn when a subsequent + * checkboxes uses a different style. + * + * These values can also be passed in as an object, such as: + * + * ```json + * { + * "checked": 'x', + * "unchecked": ' ' + * } + * ``` + * @example + * + * + * + * - [x] List item + * - [x] List item + * + * + * - [X] List item + * - [X] List item + * + * + * - [ ] List item + * - [ ] List item + * + * + * - [»···] List item + * - [»···] List item + * + * + * - [x] List item + * - [X] List item + * - [ ] List item + * - [»···] List item + */ + +'use strict'; + +/* + * Dependencies. + */ + +var visit = require('../utilities/visit'); +var position = require('../utilities/position'); + +/* + * Methods. + */ + +var start = position.start; +var end = position.end; + +var CHECKED = { + 'x': true, + 'X': true +}; + +var UNCHECKED = { + ' ': true, + ' ': true +}; + +/** + * Warn when list item checkboxes violate a given style. + * + * @param {Node} ast - Root node. + * @param {File} file - Virtual file. + * @param {Object?} preferred - An object with `checked` + * and `unchecked` properties, each set to null to default to + * the first found style, or set to `'x'` or `'X'` for checked, + * or `' '` (space) or `'\t'` (tab) for unchecked. + * @param {Function} done - Callback. + */ +function checkboxCharacterStyle(ast, file, preferred, done) { + var contents = file.toString(); + + if (preferred === 'consistent' || typeof preferred !== 'object') { + preferred = {}; + } + + if (!preferred.unchecked) { + preferred.unchecked = null; + } + + if (!preferred.checked) { + preferred.checked = null; + } + + if ( + preferred.unchecked !== null && + UNCHECKED[preferred.unchecked] !== true + ) { + file.fail( + 'Invalid unchecked checkbox marker `' + + preferred.unchecked + + '`: use either `\'\\t\'`, or `\' \'`' + ); + } + + if ( + preferred.checked !== null && + CHECKED[preferred.checked] !== true + ) { + file.fail( + 'Invalid checked checkbox marker `' + + preferred.checked + + '`: use either `\'x\'`, or `\'X\'`' + ); + } + + visit(ast, 'listItem', function (node) { + var type; + var initial; + var final; + var stop; + var value; + var style; + var character; + + /* + * Exit early for items without checkbox. + */ + + if ( + node.checked !== Boolean(node.checked) || + position.isGenerated(node) + ) { + return; + } + + type = node.checked ? 'checked' : 'unchecked'; + + initial = start(node).offset; + final = (node.children.length ? start(node.children[0]) : end(node)).offset; + + /* + * For a checkbox to be parsed, it must be followed + * by a white space. + */ + + value = contents.slice(initial, final).trimRight().slice(0, -1); + + /* + * The checkbox character is behind a square + * bracket. + */ + + character = value.charAt(value.length - 1); + style = preferred[type]; + + if (style === null) { + preferred[type] = character; + } else if (character !== style) { + stop = initial + value.length; + + file.warn( + type.charAt(0).toUpperCase() + type.slice(1) + + ' checkboxes should use `' + style + '` as a marker', + { + 'start': file.offsetToPosition(stop - 1), + 'end': file.offsetToPosition(stop) + } + ); + } + }); + + done(); +} + +/* + * Expose. + */ + +module.exports = checkboxCharacterStyle; diff --git a/lib/rules/index.js b/lib/rules/index.js index 73f391ae..c7ff716a 100644 --- a/lib/rules/index.js +++ b/lib/rules/index.js @@ -19,6 +19,7 @@ module.exports = { 'blockquote-indentation': require('./blockquote-indentation'), 'no-blockquote-without-caret': require('./no-blockquote-without-caret'), 'code-block-style': require('./code-block-style'), + 'checkbox-character-style': require('./checkbox-character-style'), 'definition-case': require('./definition-case'), 'definition-spacing': require('./definition-spacing'), 'no-emphasis-as-heading': require('./no-emphasis-as-heading'), diff --git a/mdast-lint.js b/mdast-lint.js index 73a129d1..af2d3235 100644 --- a/mdast-lint.js +++ b/mdast-lint.js @@ -405,7 +405,7 @@ function lint(mdast, options) { module.exports = lint; -},{"./filter":2,"./rules":18,"./sort":58,"fs":undefined,"mdast-range":64,"mdast-zone":65,"path":undefined}],4:[function(require,module,exports){ +},{"./filter":2,"./rules":19,"./sort":59,"fs":undefined,"mdast-range":65,"mdast-zone":66,"path":undefined}],4:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -515,7 +515,189 @@ function blockquoteIndentation(ast, file, preferred, done) { module.exports = blockquoteIndentation; -},{"../utilities/plural":60,"../utilities/position":61,"../utilities/to-string":62,"../utilities/visit":63}],5:[function(require,module,exports){ +},{"../utilities/plural":61,"../utilities/position":62,"../utilities/to-string":63,"../utilities/visit":64}],5:[function(require,module,exports){ +/** + * @author Titus Wormer + * @copyright 2015 Titus Wormer. All rights reserved. + * @module checkbox-character-style + * @fileoverview + * Warn when list item checkboxes violate a given style. + * + * The default value, `consistent`, detects the first used checked + * and unchecked checkbox styles, and will warn when a subsequent + * checkboxes uses a different style. + * + * These values can also be passed in as an object, such as: + * + * ```json + * { + * "checked": 'x', + * "unchecked": ' ' + * } + * ``` + * @example + * + * + * + * - [x] List item + * - [x] List item + * + * + * - [X] List item + * - [X] List item + * + * + * - [ ] List item + * - [ ] List item + * + * + * - [»···] List item + * - [»···] List item + * + * + * - [x] List item + * - [X] List item + * - [ ] List item + * - [»···] List item + */ + +'use strict'; + +/* + * Dependencies. + */ + +var visit = require('../utilities/visit'); +var position = require('../utilities/position'); + +/* + * Methods. + */ + +var start = position.start; +var end = position.end; + +var CHECKED = { + 'x': true, + 'X': true +}; + +var UNCHECKED = { + ' ': true, + ' ': true +}; + +/** + * Warn when list item bullets are indented. + * + * @param {Node} ast - Root node. + * @param {File} file - Virtual file. + * @param {*} preferred - Ignored. + * @param {Function} done - Callback. + */ +function checkboxCharacterStyle(ast, file, preferred, done) { + var contents = file.toString(); + + if (preferred === 'consistent' || typeof preferred !== 'object') { + preferred = {}; + } + + if (!preferred.unchecked) { + preferred.unchecked = null; + } + + if (!preferred.checked) { + preferred.checked = null; + } + + if ( + preferred.unchecked !== null && + UNCHECKED[preferred.unchecked] !== true + ) { + file.fail( + 'Invalid unchecked checkbox marker `' + + preferred.unchecked + + '`: use either `\'\\t\'`, or `\' \'`' + ); + } + + if ( + preferred.checked !== null && + CHECKED[preferred.checked] !== true + ) { + file.fail( + 'Invalid checked checkbox marker `' + + preferred.checked + + '`: use either `\'x\'`, or `\'X\'`' + ); + } + + visit(ast, 'listItem', function (node) { + var type; + var initial; + var final; + var stop; + var value; + var style; + var character; + + /* + * Exit early for items without checkbox. + */ + + if ( + node.checked !== Boolean(node.checked) || + position.isGenerated(node) + ) { + return; + } + + type = node.checked ? 'checked' : 'unchecked'; + + initial = start(node).offset; + final = (node.children.length ? start(node.children[0]) : end(node)).offset; + + /* + * For a checkbox to be parsed, it must be followed + * by a white space. + */ + + value = contents.slice(initial, final).trimRight().slice(0, -1); + + /* + * The checkbox character is behind a square + * bracket. + */ + + character = value.charAt(value.length - 1); + style = preferred[type]; + + if (style === null) { + preferred[type] = character; + } else if (character !== style) { + stop = initial + value.length; + + file.warn( + type.charAt(0).toUpperCase() + type.slice(1) + + ' checkboxes should use `' + style + '` as a marker', + { + 'start': file.offsetToPosition(stop - 1), + 'end': file.offsetToPosition(stop) + } + ); + } + }); + + done(); +} + +/* + * Expose. + */ + +module.exports = checkboxCharacterStyle; + +},{"../utilities/position":62,"../utilities/visit":64}],6:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -650,7 +832,7 @@ function codeBlockStyle(ast, file, preferred, done) { module.exports = codeBlockStyle; -},{"../utilities/position":61,"../utilities/visit":63}],6:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],7:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -726,7 +908,7 @@ function definitionCase(ast, file, preferred, done) { module.exports = definitionCase; -},{"../utilities/position":61,"../utilities/visit":63}],7:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],8:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -802,7 +984,7 @@ function definitionSpacing(ast, file, preferred, done) { module.exports = definitionSpacing; -},{"../utilities/position":61,"../utilities/visit":63}],8:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],9:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -888,7 +1070,7 @@ function emphasisMarker(ast, file, preferred, done) { module.exports = emphasisMarker; -},{"../utilities/position":61,"../utilities/visit":63}],9:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],10:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -995,7 +1177,7 @@ function fencedCodeFlag(ast, file, preferred, done) { module.exports = fencedCodeFlag; -},{"../utilities/position":61,"../utilities/visit":63}],10:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],11:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1111,7 +1293,7 @@ function fencedCodeMarker(ast, file, preferred, done) { module.exports = fencedCodeMarker; -},{"../utilities/position":61,"../utilities/visit":63}],11:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],12:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1158,7 +1340,7 @@ function fileExtension(ast, file, preferred, done) { module.exports = fileExtension; -},{}],12:[function(require,module,exports){ +},{}],13:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1235,7 +1417,7 @@ function finalDefinition(ast, file, preferred, done) { module.exports = finalDefinition; -},{"../utilities/position":61,"../utilities/visit":63}],13:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],14:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1275,7 +1457,7 @@ function finalNewline(ast, file, preferred, done) { module.exports = finalNewline; -},{}],14:[function(require,module,exports){ +},{}],15:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1329,7 +1511,7 @@ function firstHeadingLevel(ast, file, preferred, done) { module.exports = firstHeadingLevel; -},{"../utilities/position":61,"../utilities/visit":63}],15:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],16:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1391,7 +1573,7 @@ function hardBreakSpaces(ast, file, preferred, done) { module.exports = hardBreakSpaces; -},{"../utilities/position":61,"../utilities/visit":63}],16:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],17:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1456,7 +1638,7 @@ function headingIncrement(ast, file, preferred, done) { module.exports = headingIncrement; -},{"../utilities/position":61,"../utilities/visit":63}],17:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],18:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1556,7 +1738,7 @@ function headingStyle(ast, file, preferred, done) { module.exports = headingStyle; -},{"../utilities/heading-style":59,"../utilities/position":61,"../utilities/visit":63}],18:[function(require,module,exports){ +},{"../utilities/heading-style":60,"../utilities/position":62,"../utilities/visit":64}],19:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1578,6 +1760,7 @@ module.exports = { 'blockquote-indentation': require('./blockquote-indentation'), 'no-blockquote-without-caret': require('./no-blockquote-without-caret'), 'code-block-style': require('./code-block-style'), + 'checkbox-character-style': require('./checkbox-character-style'), 'definition-case': require('./definition-case'), 'definition-spacing': require('./definition-spacing'), 'no-emphasis-as-heading': require('./no-emphasis-as-heading'), @@ -1626,7 +1809,7 @@ module.exports = { 'unordered-list-marker-style': require('./unordered-list-marker-style') }; -},{"./blockquote-indentation":4,"./code-block-style":5,"./definition-case":6,"./definition-spacing":7,"./emphasis-marker":8,"./fenced-code-flag":9,"./fenced-code-marker":10,"./file-extension":11,"./final-definition":12,"./final-newline":13,"./first-heading-level":14,"./hard-break-spaces":15,"./heading-increment":16,"./heading-style":17,"./link-title-style":19,"./list-item-bullet-indent":20,"./list-item-content-indent":21,"./list-item-indent":22,"./list-item-spacing":23,"./maximum-heading-length":24,"./maximum-line-length":25,"./no-auto-link-without-protocol":26,"./no-blockquote-without-caret":27,"./no-consecutive-blank-lines":28,"./no-duplicate-definitions":29,"./no-duplicate-headings":30,"./no-emphasis-as-heading":31,"./no-file-name-articles":32,"./no-file-name-consecutive-dashes":33,"./no-file-name-irregular-characters":34,"./no-file-name-mixed-case":35,"./no-file-name-outer-dashes":36,"./no-heading-content-indent":37,"./no-heading-indent":38,"./no-heading-punctuation":39,"./no-html":40,"./no-inline-padding":41,"./no-literal-urls":42,"./no-missing-blank-lines":43,"./no-multiple-toplevel-headings":44,"./no-shell-dollars":45,"./no-shortcut-reference-image":46,"./no-shortcut-reference-link":47,"./no-table-indentation":48,"./no-tabs":49,"./ordered-list-marker-style":50,"./ordered-list-marker-value":51,"./rule-style":52,"./strong-marker":53,"./table-cell-padding":54,"./table-pipe-alignment":55,"./table-pipes":56,"./unordered-list-marker-style":57}],19:[function(require,module,exports){ +},{"./blockquote-indentation":4,"./checkbox-character-style":5,"./code-block-style":6,"./definition-case":7,"./definition-spacing":8,"./emphasis-marker":9,"./fenced-code-flag":10,"./fenced-code-marker":11,"./file-extension":12,"./final-definition":13,"./final-newline":14,"./first-heading-level":15,"./hard-break-spaces":16,"./heading-increment":17,"./heading-style":18,"./link-title-style":20,"./list-item-bullet-indent":21,"./list-item-content-indent":22,"./list-item-indent":23,"./list-item-spacing":24,"./maximum-heading-length":25,"./maximum-line-length":26,"./no-auto-link-without-protocol":27,"./no-blockquote-without-caret":28,"./no-consecutive-blank-lines":29,"./no-duplicate-definitions":30,"./no-duplicate-headings":31,"./no-emphasis-as-heading":32,"./no-file-name-articles":33,"./no-file-name-consecutive-dashes":34,"./no-file-name-irregular-characters":35,"./no-file-name-mixed-case":36,"./no-file-name-outer-dashes":37,"./no-heading-content-indent":38,"./no-heading-indent":39,"./no-heading-punctuation":40,"./no-html":41,"./no-inline-padding":42,"./no-literal-urls":43,"./no-missing-blank-lines":44,"./no-multiple-toplevel-headings":45,"./no-shell-dollars":46,"./no-shortcut-reference-image":47,"./no-shortcut-reference-link":48,"./no-table-indentation":49,"./no-tabs":50,"./ordered-list-marker-style":51,"./ordered-list-marker-value":52,"./rule-style":53,"./strong-marker":54,"./table-cell-padding":55,"./table-pipe-alignment":56,"./table-pipes":57,"./unordered-list-marker-style":58}],20:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1767,7 +1950,7 @@ function linkTitleStyle(ast, file, preferred, done) { module.exports = linkTitleStyle; -},{"../utilities/position":61,"../utilities/visit":63}],20:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],21:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1846,7 +2029,7 @@ function listItemBulletIndent(ast, file, preferred, done) { module.exports = listItemBulletIndent; -},{"../utilities/plural":60,"../utilities/position":61,"../utilities/visit":63}],21:[function(require,module,exports){ +},{"../utilities/plural":61,"../utilities/position":62,"../utilities/visit":64}],22:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -1960,7 +2143,7 @@ function listItemContentIndent(ast, file, preferred, done) { module.exports = listItemContentIndent; -},{"../utilities/plural":60,"../utilities/position":61,"../utilities/visit":63}],22:[function(require,module,exports){ +},{"../utilities/plural":61,"../utilities/position":62,"../utilities/visit":64}],23:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2110,7 +2293,7 @@ function listItemIndent(ast, file, preferred, done) { module.exports = listItemIndent; -},{"../utilities/plural":60,"../utilities/position":61,"../utilities/visit":63}],23:[function(require,module,exports){ +},{"../utilities/plural":61,"../utilities/position":62,"../utilities/visit":64}],24:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2230,7 +2413,7 @@ function listItemSpacing(ast, file, preferred, done) { module.exports = listItemSpacing; -},{"../utilities/position":61,"../utilities/visit":63}],24:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],25:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2291,7 +2474,7 @@ function maximumHeadingLength(ast, file, preferred, done) { module.exports = maximumHeadingLength; -},{"../utilities/position":61,"../utilities/to-string":62,"../utilities/visit":63}],25:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/to-string":63,"../utilities/visit":64}],26:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2477,7 +2660,7 @@ function maximumLineLength(ast, file, preferred, done) { module.exports = maximumLineLength; -},{"../utilities/position":61,"../utilities/visit":63}],26:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],27:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2563,7 +2746,7 @@ function noAutoLinkWithoutProtocol(ast, file, preferred, done) { module.exports = noAutoLinkWithoutProtocol; -},{"../utilities/position":61,"../utilities/to-string":62,"../utilities/visit":63}],27:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/to-string":63,"../utilities/visit":64}],28:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2649,7 +2832,7 @@ function noBlockquoteWithoutCaret(ast, file, preferred, done) { module.exports = noBlockquoteWithoutCaret; -},{"../utilities/position":61,"../utilities/visit":63}],28:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],29:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2775,7 +2958,7 @@ function noConsecutiveBlankLines(ast, file, preferred, done) { module.exports = noConsecutiveBlankLines; -},{"../utilities/plural":60,"../utilities/position":61,"../utilities/visit":63}],29:[function(require,module,exports){ +},{"../utilities/plural":61,"../utilities/position":62,"../utilities/visit":64}],30:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2852,7 +3035,7 @@ function noDuplicateDefinitions(ast, file, preferred, done) { module.exports = noDuplicateDefinitions; -},{"../utilities/position":61,"../utilities/visit":63}],30:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],31:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -2927,7 +3110,7 @@ function noDuplicateHeadings(ast, file, preferred, done) { module.exports = noDuplicateHeadings; -},{"../utilities/position":61,"../utilities/to-string":62,"../utilities/visit":63}],31:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/to-string":63,"../utilities/visit":64}],32:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3010,7 +3193,7 @@ function noEmphasisAsHeading(ast, file, preferred, done) { module.exports = noEmphasisAsHeading; -},{"../utilities/position":61,"../utilities/to-string":62,"../utilities/visit":63}],32:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/to-string":63,"../utilities/visit":64}],33:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3048,7 +3231,7 @@ function noFileNameArticles(ast, file, preferred, done) { module.exports = noFileNameArticles; -},{}],33:[function(require,module,exports){ +},{}],34:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3084,7 +3267,7 @@ function noFileNameConsecutiveDashes(ast, file, preferred, done) { module.exports = noFileNameConsecutiveDashes; -},{}],34:[function(require,module,exports){ +},{}],35:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3124,7 +3307,7 @@ function noFileNameIrregularCharacters(ast, file, preferred, done) { module.exports = noFileNameIrregularCharacters; -},{}],35:[function(require,module,exports){ +},{}],36:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3164,7 +3347,7 @@ function noFileNameMixedCase(ast, file, preferred, done) { module.exports = noFileNameMixedCase; -},{}],36:[function(require,module,exports){ +},{}],37:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3200,7 +3383,7 @@ function noFileNameOuterDashes(ast, file, preferred, done) { module.exports = noFileNameOuterDashes; -},{}],37:[function(require,module,exports){ +},{}],38:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3321,7 +3504,7 @@ function noHeadingContentIndent(ast, file, preferred, done) { module.exports = noHeadingContentIndent; -},{"../utilities/heading-style":59,"../utilities/plural":60,"../utilities/position":61,"../utilities/visit":63}],38:[function(require,module,exports){ +},{"../utilities/heading-style":60,"../utilities/plural":61,"../utilities/position":62,"../utilities/visit":64}],39:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3424,7 +3607,7 @@ function noHeadingIndent(ast, file, preferred, done) { module.exports = noHeadingIndent; -},{"../utilities/plural":60,"../utilities/position":61,"../utilities/visit":63}],39:[function(require,module,exports){ +},{"../utilities/plural":61,"../utilities/position":62,"../utilities/visit":64}],40:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3497,7 +3680,7 @@ function noHeadingPunctuation(ast, file, preferred, done) { module.exports = noHeadingPunctuation; -},{"../utilities/position":61,"../utilities/to-string":62,"../utilities/visit":63}],40:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/to-string":63,"../utilities/visit":64}],41:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3544,7 +3727,7 @@ function html(ast, file, preferred, done) { module.exports = html; -},{"../utilities/position":61,"../utilities/visit":63}],41:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],42:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3614,7 +3797,7 @@ function noInlinePadding(ast, file, preferred, done) { module.exports = noInlinePadding; -},{"../utilities/position":61,"../utilities/to-string":62,"../utilities/visit":63}],42:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/to-string":63,"../utilities/visit":64}],43:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3678,7 +3861,7 @@ function noLiteralURLs(ast, file, preferred, done) { module.exports = noLiteralURLs; -},{"../utilities/position":61,"../utilities/visit":63}],43:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],44:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3761,7 +3944,7 @@ function noMissingBlankLines(ast, file, preferred, done) { module.exports = noMissingBlankLines; -},{"../utilities/position":61,"../utilities/visit":63}],44:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],45:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3823,7 +4006,7 @@ function noMultipleToplevelHeadings(ast, file, preferred, done) { module.exports = noMultipleToplevelHeadings; -},{"../utilities/position":61,"../utilities/visit":63}],45:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],46:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3926,7 +4109,7 @@ function noShellDollars(ast, file, preferred, done) { module.exports = noShellDollars; -},{"../utilities/position":61,"../utilities/visit":63}],46:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],47:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -3982,7 +4165,7 @@ function noShortcutReferenceImage(ast, file, preferred, done) { module.exports = noShortcutReferenceImage; -},{"../utilities/position":61,"../utilities/visit":63}],47:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],48:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4038,7 +4221,7 @@ function noShortcutReferenceLink(ast, file, preferred, done) { module.exports = noShortcutReferenceLink; -},{"../utilities/position":61,"../utilities/visit":63}],48:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],49:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4100,7 +4283,7 @@ function noTableIndentation(ast, file, preferred, done) { module.exports = noTableIndentation; -},{"../utilities/position":61,"../utilities/visit":63}],49:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],50:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4150,7 +4333,7 @@ function noTabs(ast, file, preferred, done) { module.exports = noTabs; -},{}],50:[function(require,module,exports){ +},{}],51:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4268,7 +4451,7 @@ function orderedListMarkerStyle(ast, file, preferred, done) { module.exports = orderedListMarkerStyle; -},{"../utilities/position":61,"../utilities/visit":63}],51:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],52:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4426,7 +4609,7 @@ function orderedListMarkerValue(ast, file, preferred, done) { module.exports = orderedListMarkerValue; -},{"../utilities/position":61,"../utilities/visit":63}],52:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],53:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4525,7 +4708,7 @@ function ruleStyle(ast, file, preferred, done) { module.exports = ruleStyle; -},{"../utilities/position":61,"../utilities/visit":63}],53:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],54:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4609,7 +4792,7 @@ function strongMarker(ast, file, preferred, done) { module.exports = strongMarker; -},{"../utilities/position":61,"../utilities/visit":63}],54:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],55:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4787,7 +4970,7 @@ function tableCellPadding(ast, file, preferred, done) { module.exports = tableCellPadding; -},{"../utilities/position":61,"../utilities/visit":63}],55:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],56:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4889,7 +5072,7 @@ function tablePipeAlignment(ast, file, preferred, done) { module.exports = tablePipeAlignment; -},{"../utilities/position":61,"../utilities/visit":63}],56:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],57:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -4966,7 +5149,7 @@ function tablePipes(ast, file, preferred, done) { module.exports = tablePipes; -},{"../utilities/position":61,"../utilities/visit":63}],57:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],58:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -5089,7 +5272,7 @@ function unorderedListMarkerStyle(ast, file, preferred, done) { module.exports = unorderedListMarkerStyle; -},{"../utilities/position":61,"../utilities/visit":63}],58:[function(require,module,exports){ +},{"../utilities/position":62,"../utilities/visit":64}],59:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -5135,7 +5318,7 @@ function attacher() { module.exports = attacher; -},{}],59:[function(require,module,exports){ +},{}],60:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -5216,7 +5399,7 @@ function style(node, relative) { module.exports = style; -},{"./position":61}],60:[function(require,module,exports){ +},{"./position":62}],61:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -5251,7 +5434,7 @@ function plural(word, count) { module.exports = plural; -},{}],61:[function(require,module,exports){ +},{}],62:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -5318,7 +5501,7 @@ var position = { module.exports = position; -},{}],62:[function(require,module,exports){ +},{}],63:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -5362,7 +5545,7 @@ function toString(node) { module.exports = toString; -},{}],63:[function(require,module,exports){ +},{}],64:[function(require,module,exports){ /** * @author Titus Wormer * @copyright 2015 Titus Wormer. All rights reserved. @@ -5475,7 +5658,7 @@ function visit(tree, type, callback, reverse) { module.exports = visit; -},{}],64:[function(require,module,exports){ +},{}],65:[function(require,module,exports){ 'use strict'; /** @@ -5589,7 +5772,7 @@ function offsetToPositionFactory(offsets) { if (offsets[index] > offset) { return { 'line': index + 1, - 'column': (offset - offsets[index - 1] || 0) + 1 + 'column': (offset - (offsets[index - 1] || 0)) + 1 }; } } @@ -5664,7 +5847,7 @@ function attacher() { module.exports = attacher; -},{}],65:[function(require,module,exports){ +},{}],66:[function(require,module,exports){ 'use strict'; /* diff --git a/mdast-lint.min.js b/mdast-lint.min.js index d8a3c01c..12bc28af 100644 --- a/mdast-lint.min.js +++ b/mdast-lint.min.js @@ -1 +1 @@ -!function(b,a){typeof exports==='object'&&typeof module!=='undefined'?module.exports=b():typeof define==='function'&&define.amd?define([],b):(typeof window!=='undefined'?a=window:typeof global!=='undefined'?a=global:typeof self!=='undefined'?a=self:a=this,a.mdastLint=b())}(function(){return function a(b,c,e){function f(d,k){if(!c[d]){if(!b[d]){var i=typeof require=='function'&&require;if(!k&&i)return i(d,!0);if(g)return g(d,!0);var j=new Error("Cannot find module '"+d+"'");throw j.code='MODULE_NOT_FOUND',j}var h=c[d]={exports:{}};b[d][0].call(h.exports,function(c){var a=b[d][1][c];return f(a?a:c)},h,h.exports,a,b,c,e)}return c[d].exports}var g=typeof require=='function'&&require;for(var d=0;df)if(c=d[e],c.position.line0?'Add':'Remove',d=Math.abs(d),d!==0&&g.warn(i+' '+d+' '+f('space',d)+' between blockquote and content',a.start(e.children[0]))):b=c(e)}),h()}var d=b('../utilities/visit'),e=b('../utilities/to-string'),f=b('../utilities/plural'),a=b('../utilities/position');g.exports=h},{'../utilities/plural':60,'../utilities/position':61,'../utilities/to-string':62,'../utilities/visit':63}],5:[function(b,g,i){'use strict';function h(i,g,b,j){function k(b){var c=d(b).offset,f=e(b).offset;return a.isGenerated(b)?null:b.lang||/^\s*([~`])\1{2,}/.test(h.slice(c,f))?'fenced':'indented'}var h=g.toString();if(b=typeof b!=='string'||b==='consistent'?null:b,f[b]!==!0){g.fail('Invalid code block style `'+b+"`: use either `'consistent'`, `'fenced'`, or `'indented'`");return}c(i,'code',function(c){var a=k(c);if(!a)return;b?b!==a&&g.warn('Code blocks should be '+b,c):b=a}),j()}var c=b('../utilities/visit'),a=b('../utilities/position'),d=a.start,e=a.end,f={null:!0,fenced:!0,indented:!0};g.exports=h},{'../utilities/position':61,'../utilities/visit':63}],6:[function(c,e,g){'use strict';function f(c,e,i,h){function f(b){var f=a.start(b).offset,h=a.end(b).offset,c;if(a.isGenerated(b))return;c=g.slice(f,h).match(d)[1],c!==c.toLowerCase()&&e.warn('Do not use uppper-case characters in definition labels',b)}var g=e.toString();b(c,'definition',f),b(c,'footnoteDefinition',f),h()}var b=c('../utilities/visit'),a=c('../utilities/position'),d=/^\s*\[((?:\\[\s\S]|[^\[\]])+)\]/;e.exports=f},{'../utilities/position':61,'../utilities/visit':63}],7:[function(c,e,g){'use strict';function f(c,e,i,h){function f(b){var c=a.start(b).offset,f=a.end(b).offset,h;if(a.isGenerated(b))return;h=g.slice(c,f).match(d)[1],/[ \t\n]{2,}/.test(h)&&e.warn('Do not use consecutive white-space in definition labels',b)}var g=e.toString();b(c,'definition',f),b(c,'footnoteDefinition',f),h()}var b=c('../utilities/visit'),a=c('../utilities/position'),d=/^\s*\[((?:\\[\s\S]|[^\[\]])+)\]/;e.exports=f},{'../utilities/position':61,'../utilities/visit':63}],8:[function(b,e,g){'use strict';function f(f,e,b,g){if(b=typeof b!=='string'||b==='consistent'?null:b,d[b]!==!0){e.fail('Invalid emphasis marker `'+b+"`: use either `'consistent'`, `'*'`, or `'_'`");return}c(f,'emphasis',function(c){var d=e.toString().charAt(a.start(c).offset);if(a.isGenerated(c))return;b?d!==b&&e.warn('Emphasis should use `'+b+'` as a marker',c):b=d}),g()}var c=b('../utilities/visit'),a=b('../utilities/position'),d={'*':!0,_:!0,null:!0};e.exports=f},{'../utilities/position':61,'../utilities/visit':63}],9:[function(b,f,h){'use strict';function g(j,g,b,k){var i=g.toString(),h=!1,f=[];typeof b==='object'&&!('length'in b)&&(h=Boolean(b.allowEmpty),b=b.flags),typeof b==='object'&&'length'in b&&(f=String(b).split(',')),c(j,'code',function(b){var c=i.slice(d(b).offset,e(b).offset);if(a.isGenerated(b))return;b.lang?f.length&&f.indexOf(b.lang)===-1&&g.warn('Invalid code-language flag',b):/^\ {0,3}([~`])\1{2,}/.test(c)&&!h&&g.warn('Missing code-language flag',b)}),k()}var c=b('../utilities/visit'),a=b('../utilities/position'),d=a.start,e=a.end;f.exports=g},{'../utilities/position':61,'../utilities/visit':63}],10:[function(c,e,g){'use strict';function f(g,e,c,h){var f=e.toString();if(c=typeof c!=='string'||c==='consistent'?null:c,b[c]!==!0){e.fail('Invalid fenced code marker `'+c+"`: use either `'consistent'`, `` '`' ``, or `'~'`");return}d(g,'code',function(g){var d=f.substr(a.start(g).offset,4);if(a.isGenerated(g))return;if(d=d.trimLeft().charAt(0),b[d]!==!0)return;c?d!==c&&e.warn('Fenced code should use '+c+' as a marker',g):c=d}),h()}var d=c('../utilities/visit'),a=c('../utilities/position'),b={'`':!0,'~':!0,null:!0};e.exports=f},{'../utilities/position':61,'../utilities/visit':63}],11:[function(c,a,d){'use strict';function b(e,c,a,d){var b=c.extension;a=typeof a==='string'?a:'md',b!==''&&b!==a&&c.warn('Invalid extension: use `'+a+'`'),d()}a.exports=b},{}],12:[function(b,e,g){'use strict';function f(e,f,h,g){var b=null;c(e,function(c){var e=d(c).line;if(c.type==='root'||a.isGenerated(c))return;c.type==='definition'?b!==null&&b>e&&f.warn('Move definitions to the end of the file (after the node at line `'+b+'`)',c):b===null&&(b=e)},!0),g()}var c=b('../utilities/visit'),a=b('../utilities/position'),d=a.start;e.exports=f},{'../utilities/position':61,'../utilities/visit':63}],13:[function(c,a,d){'use strict';function b(e,c,f,d){var a=c.toString(),b=a.length-1;b>0&&a.charAt(b)!=='\n'&&c.warn('Missing newline character at end of file'),d()}a.exports=b},{}],14:[function(a,d,f){'use strict';function e(a,d,f,e){b(a,'heading',function(a){return c.isGenerated(a)?null:(a.depth!==1&&d.warn('First heading level should be `1`',a),!1)}),e()}var b=a('../utilities/visit'),c=a('../utilities/position');d.exports=e},{'../utilities/position':61,'../utilities/visit':63}],15:[function(b,d,f){'use strict';function e(e,b,g,f){var d=b.toString();c(e,'break',function(c){var e=a.start(c).offset,f=a.end(c).offset;if(a.isGenerated(c))return;d.slice(e,f).length>3&&b.warn('Use two spaces for hard line breaks',c)}),f()}var c=b('../utilities/visit'),a=b('../utilities/position');d.exports=e},{'../utilities/position':61,'../utilities/visit':63}],16:[function(a,d,f){'use strict';function e(d,e,g,f){var a=null;b(d,'heading',function(b){var d=b.depth;if(c.isGenerated(b))return;a&&d>a+1&&e.warn('Heading levels should increment by one level at a time',b),a=d}),f()}var b=a('../utilities/visit'),c=a('../utilities/position');d.exports=e},{'../utilities/position':61,'../utilities/visit':63}],17:[function(a,f,h){'use strict';function g(f,g,a,h){a=e.indexOf(a)===-1?null:a,c(f,'heading',function(c){if(d.isGenerated(c))return;a?b(c,a)!==a&&g.warn('Headings should use '+a,c):a=b(c,a)}),h()}var c=a('../utilities/visit'),b=a('../utilities/heading-style'),d=a('../utilities/position'),e=['atx','atx-closed','setext'];f.exports=g},{'../utilities/heading-style':59,'../utilities/position':61,'../utilities/visit':63}],18:[function(a,b,c){'use strict';b.exports={'no-auto-link-without-protocol':a('./no-auto-link-without-protocol'),'no-literal-urls':a('./no-literal-urls'),'no-consecutive-blank-lines':a('./no-consecutive-blank-lines'),'no-missing-blank-lines':a('./no-missing-blank-lines'),'blockquote-indentation':a('./blockquote-indentation'),'no-blockquote-without-caret':a('./no-blockquote-without-caret'),'code-block-style':a('./code-block-style'),'definition-case':a('./definition-case'),'definition-spacing':a('./definition-spacing'),'no-emphasis-as-heading':a('./no-emphasis-as-heading'),'emphasis-marker':a('./emphasis-marker'),'fenced-code-flag':a('./fenced-code-flag'),'fenced-code-marker':a('./fenced-code-marker'),'file-extension':a('./file-extension'),'final-newline':a('./final-newline'),'no-file-name-articles':a('./no-file-name-articles'),'no-file-name-consecutive-dashes':a('./no-file-name-consecutive-dashes'),'no-file-name-irregular-characters':a('./no-file-name-irregular-characters'),'no-file-name-mixed-case':a('./no-file-name-mixed-case'),'no-file-name-outer-dashes':a('./no-file-name-outer-dashes'),'final-definition':a('./final-definition'),'hard-break-spaces':a('./hard-break-spaces'),'heading-increment':a('./heading-increment'),'no-heading-content-indent':a('./no-heading-content-indent'),'no-heading-indent':a('./no-heading-indent'),'first-heading-level':a('./first-heading-level'),'maximum-heading-length':a('./maximum-heading-length'),'no-heading-punctuation':a('./no-heading-punctuation'),'heading-style':a('./heading-style'),'no-multiple-toplevel-headings':a('./no-multiple-toplevel-headings'),'no-duplicate-headings':a('./no-duplicate-headings'),'no-duplicate-definitions':a('./no-duplicate-definitions'),'no-html':a('./no-html'),'no-inline-padding':a('./no-inline-padding'),'maximum-line-length':a('./maximum-line-length'),'link-title-style':a('./link-title-style'),'list-item-bullet-indent':a('./list-item-bullet-indent'),'list-item-content-indent':a('./list-item-content-indent'),'list-item-indent':a('./list-item-indent'),'list-item-spacing':a('./list-item-spacing'),'ordered-list-marker-style':a('./ordered-list-marker-style'),'ordered-list-marker-value':a('./ordered-list-marker-value'),'no-shortcut-reference-image':a('./no-shortcut-reference-image'),'no-shortcut-reference-link':a('./no-shortcut-reference-link'),'rule-style':a('./rule-style'),'no-shell-dollars':a('./no-shell-dollars'),'strong-marker':a('./strong-marker'),'no-table-indentation':a('./no-table-indentation'),'table-pipe-alignment':a('./table-pipe-alignment'),'table-cell-padding':a('./table-cell-padding'),'table-pipes':a('./table-pipes'),'no-tabs':a('./no-tabs'),'unordered-list-marker-style':a('./unordered-list-marker-style')}},{'./blockquote-indentation':4,'./code-block-style':5,'./definition-case':6,'./definition-spacing':7,'./emphasis-marker':8,'./fenced-code-flag':9,'./fenced-code-marker':10,'./file-extension':11,'./final-definition':12,'./final-newline':13,'./first-heading-level':14,'./hard-break-spaces':15,'./heading-increment':16,'./heading-style':17,'./link-title-style':19,'./list-item-bullet-indent':20,'./list-item-content-indent':21,'./list-item-indent':22,'./list-item-spacing':23,'./maximum-heading-length':24,'./maximum-line-length':25,'./no-auto-link-without-protocol':26,'./no-blockquote-without-caret':27,'./no-consecutive-blank-lines':28,'./no-duplicate-definitions':29,'./no-duplicate-headings':30,'./no-emphasis-as-heading':31,'./no-file-name-articles':32,'./no-file-name-consecutive-dashes':33,'./no-file-name-irregular-characters':34,'./no-file-name-mixed-case':35,'./no-file-name-outer-dashes':36,'./no-heading-content-indent':37,'./no-heading-indent':38,'./no-heading-punctuation':39,'./no-html':40,'./no-inline-padding':41,'./no-literal-urls':42,'./no-missing-blank-lines':43,'./no-multiple-toplevel-headings':44,'./no-shell-dollars':45,'./no-shortcut-reference-image':46,'./no-shortcut-reference-link':47,'./no-table-indentation':48,'./no-tabs':49,'./ordered-list-marker-style':50,'./ordered-list-marker-value':51,'./rule-style':52,'./strong-marker':53,'./table-cell-padding':54,'./table-pipe-alignment':55,'./table-pipes':56,'./unordered-list-marker-style':57}],19:[function(d,f,h){'use strict';function g(g,f,d,j){function h(h){var a=e(h).offset-1,g,j;if(b.isGenerated(h))return;h.type!=='definition'&&a--;while(a){if(g=i.charAt(a),!/\s/.test(g))break;a--}if(!(g in c))return;d?d!==g&&(j=f.offsetToPosition(a+1),f.warn(d===')'?'Titles should use `()` as a quote':'Titles should use `'+d+'` as a quote',j)):d=g}var i=f.toString();if(d=typeof d!=='string'||d==='consistent'?null:d,(d==='()'||d==='(')&&(d=')'),c[d]!==!0){f.fail('Invalid link title style marker `'+d+"`: use either `'consistent'`, `'\"'`, `'\\''`, or `'()'`");return}a(g,'link',h),a(g,'image',h),a(g,'definition',h),j()}var a=d('../utilities/visit'),b=d('../utilities/position'),c={'"':!0,"'":!0,')':!0,null:!0},e=b.end;f.exports=g},{'../utilities/position':61,'../utilities/visit':63}],20:[function(b,f,h){'use strict';function g(g,b,i,h){var f=b.toString();d(g,'list',function(d){var g=d.children;g.forEach(function(j){var i=j.children[0],g=a(j).offset,k=a(i).offset,h;if(c.isGenerated(d))return;h=f.slice(g,k).match(/^\s*/)[0].length,h!==0&&(g=a(i),b.warn('Incorrect indentation before bullet: remove '+h+' '+e('space',h),{line:g.line,column:g.column-h}))})}),h()}var d=b('../utilities/visit'),c=b('../utilities/position'),e=b('../utilities/plural'),a=c.start;f.exports=g},{'../utilities/plural':60,'../utilities/position':61,'../utilities/visit':63}],21:[function(a,f,h){'use strict';function g(g,a,i,h){var f=a.toString();d(g,'listItem',function(d){var g;d.children.forEach(function(l,n){var j=c(l),h=j.column,k,i,m;if(b.isGenerated(l))return;if(n===0){if(Boolean(d.checked)===d.checked){k=j.offset;while(f.charAt(k)!=='[')k--;h-=j.offset-k}g=h;return}h!==g&&(i=g-h,m=i>0?'add':'remove',i=Math.abs(i),a.warn('Don’t use mixed indentation for children, '+m+' '+i+' '+e('space',i),{line:c(l).line,column:h}))})}),h()}var d=a('../utilities/visit'),b=a('../utilities/position'),e=a('../utilities/plural'),c=b.start;f.exports=g},{'../utilities/plural':60,'../utilities/position':61,'../utilities/visit':63}],22:[function(b,g,i){'use strict';function h(i,g,b,j){var h=g.toString();if(b=typeof b!=='string'?'tab-size':b,f[b]!==!0){g.fail('Invalid list-item indent style `'+b+"`: use either `'tab-size'`, `'space'`, or `'mixed'`");return}d(i,'list',function(d){var f=d.children,i=d.ordered,j=d.start||1;if(c.isGenerated(d))return;f.forEach(function(r,s){var m=r.children[0],l=i?String(j+s).length+1:1,n=Math.ceil(l/4)*4,o=a(r).offset,p=a(m).offset,f,k,c,q;f=h.slice(o,p),f=f.replace(/\[[x ]?\]\s*$/i,''),b==='tab-size'?k=n:b==='space'?k=l+1:k=d.loose?n:l+1,f.length!==k&&(c=k-f.length,q=c>0?'add':'remove',c=Math.abs(c),g.warn('Incorrect list-item indent: '+q+' '+c+' '+e('space',c),a(m)))})}),j()}var d=b('../utilities/visit'),c=b('../utilities/position'),e=b('../utilities/plural'),a=c.start,f={'tab-size':!0,mixed:!0,space:!0};g.exports=h},{'../utilities/plural':60,'../utilities/position':61,'../utilities/visit':63}],23:[function(d,f,h){'use strict';function g(d,f,h,g){e(d,'list',function(g){var d=g.children,e=!0,h=b(g).column,i;if(a.isGenerated(g))return;d.forEach(function(h){var a=h.children,d=a[0],f=a[a.length-1],g=c(f).line-b(d).line>0;g&&(e=!1)}),i=e?'tight':'loose',d.forEach(function(g,k){var a=d[k+1],j=c(g).column>h;if(!a)return;j!==e&&f.warn('List item should be '+i+', isn’t',{start:c(g),end:b(a)})})}),g()}var e=d('../utilities/visit'),a=d('../utilities/position'),b=a.start,c=a.end;f.exports=g},{'../utilities/position':61,'../utilities/visit':63}],24:[function(a,e,g){'use strict';function f(e,f,a,g){a=isNaN(a)||typeof a!=='number'?60:a,b(e,'heading',function(b){if(d.isGenerated(b))return;c(b).length>a&&f.warn('Use headings shorter than `'+a+'`',b)}),g()}var b=a('../utilities/visit'),c=a('../utilities/to-string'),d=a('../utilities/position');e.exports=f},{'../utilities/position':61,'../utilities/to-string':62,'../utilities/visit':63}],25:[function(e,f,i){'use strict';function g(a){return a.type==='heading'||a.type==='table'||a.type==='code'}function h(k,l,j,q){function p(a,b){a--;while(++ae||h.columne&&l.warn('Line must be at most '+e+' characters',{line:h+1,column:i+1});q()}var b=e('../utilities/visit'),a=e('../utilities/position'),c=a.start,d=a.end;f.exports=h},{'../utilities/position':61,'../utilities/visit':63}],26:[function(d,j,k){'use strict';function i(a){return g.test(f(a))}function h(d,f,h,g){e(d,'link',function(d){var e=c(d.children[0]).column,g=b(d.children[d.children.length-1]).column,h=c(d).column,j=b(d).column;if(a.isGenerated(d))return;h===e-1&&j===g+1&&!i(d)&&f.warn('All automatic links must start with a protocol',d)}),g()}var e=d('../utilities/visit'),f=d('../utilities/to-string'),a=d('../utilities/position'),c=a.start,b=a.end,g=/^[a-z][a-z+.-]+:\/?/i;j.exports=h},{'../utilities/position':61,'../utilities/to-string':62,'../utilities/visit':63}],27:[function(b,d,f){'use strict';function e(f,b,h,g){var d=b.toString(),e=d.length;c(f,'blockquote',function(c){var g=a.start(c).line,f=c.position&&c.position.indent;if(a.isGenerated(c)||!f||!f.length)return;f.forEach(function(h,i){var a,c=g+i+1,f=b.positionToOffset({line:c,column:h})-1;while(++f')return;if(a!==' '&&a!==' ')break}b.warn('Missing caret in blockquote',{line:c,column:h})})}),g()}var c=b('../utilities/visit'),a=b('../utilities/position');d.exports=e},{'../utilities/position':61,'../utilities/visit':63}],28:[function(b,f,h){'use strict';function g(f,g,i,h){function b(e,b,f){var a=b.line-e.line,c=a>0?'before':'after';a=Math.abs(a)-f,a>0&&g.warn('Remove '+a+' '+d('line',a)+' '+c+' node',b)}c(f,function(d){var c=d.children;if(a.isGenerated(d))return;c&&c[0]&&(b(a.start(d),a.start(c[0]),0),c.forEach(function(f,h){var d=c[h-1],g=e;if(!d)return;(d.type==='list'&&f.type==='list'||f.type==='code'&&d.type==='list'&&!f.lang)&&g++,b(a.end(d),a.start(f),g)}),b(a.end(d),a.end(c[c.length-1]),1))}),h()}var c=b('../utilities/visit'),a=b('../utilities/position'),d=b('../utilities/plural'),e=2;f.exports=g},{'../utilities/plural':60,'../utilities/position':61,'../utilities/visit':63}],29:[function(c,d,f){'use strict';function e(d,f,h,g){function e(b){var d=c[b.identifier],e;if(a.isGenerated(b))return;d&&d.type&&(e=a.start(d),f.warn('Do not use definitions with the same identifier ('+e.line+':'+e.column+')',b)),c[b.identifier]=b}var c={};b(d,'definition',e),b(d,'footnoteDefinition',e),g()}var a=c('../utilities/position'),b=c('../utilities/visit');d.exports=e},{'../utilities/position':61,'../utilities/visit':63}],30:[function(a,e,g){'use strict';function f(e,f,h,g){var a={};c(e,'heading',function(c){var g=d(c).toUpperCase(),e=a[g],h;if(b.isGenerated(c))return;e&&e.type==='heading'&&(h=b.start(e),f.warn('Do not use headings with similar content ('+h.line+':'+h.column+')',c)),a[g]=c}),g()}var b=a('../utilities/position'),c=a('../utilities/visit'),d=a('../utilities/to-string');e.exports=f},{'../utilities/position':61,'../utilities/to-string':62,'../utilities/visit':63}],31:[function(a,e,g){'use strict';function f(a,e,g,f){b(a,'paragraph',function(b,j,k){var f=b.children,a=f[0],g=k.children[j-1],h=k.children[j+1],i;if(d.isGenerated(b))return;(!g||g.type!=='heading')&&h&&h.type==='paragraph'&&f.length===1&&(a.type==='emphasis'||a.type==='strong')&&(i=c(a),i.charAt(i.length-1)===':'&&e.warn('Don’t use emphasis to introduce a section, use a heading',b))}),f()}var b=a('../utilities/visit'),c=a('../utilities/to-string'),d=a('../utilities/position');e.exports=f},{'../utilities/position':61,'../utilities/to-string':62,'../utilities/visit':63}],32:[function(c,a,d){'use strict';function b(d,a,e,c){var b=a.filename&&a.filename.match(/^(the|an?)\b/i);b&&a.warn('Do not start file names with `'+b[0]+'`'),c()}a.exports=b},{}],33:[function(c,a,d){'use strict';function b(c,a,d,b){a.filename&&/-{2,}/.test(a.filename)&&a.warn('Do not use consecutive dashes in a file name'),b()}a.exports=b},{}],34:[function(c,a,d){'use strict';function b(d,a,e,c){var b=a.filename&&a.filename.match(/[^.a-zA-Z0-9-]/);b&&a.warn('Do not use `'+b[0]+'` in a file name'),c()}a.exports=b},{}],35:[function(c,a,d){'use strict';function b(d,b,e,c){var a=b.filename;a&&!(a===a.toLowerCase()||a===a.toUpperCase())&&b.warn('Do not mix casing in file names'),c()}a.exports=b},{}],36:[function(c,a,d){'use strict';function b(c,a,d,b){a.filename&&/^-|-$/.test(a.filename)&&a.warn('Do not use initial or final dashes in a file name'),b()}a.exports=b},{}],37:[function(c,i,j){'use strict';function h(i,c,k,j){var h=c.toString();f(i,'heading',function(i){var n=i.depth,k=i.children,l=g(i,'atx'),m,o,f,p,j;if(b.isGenerated(i))return;if(l==='atx'||l==='atx-closed'){m=a(i),j=m.offset;while(h.charAt(j)!=='#')j++;j=n+(j-m.offset),f=a(k[0]).column-m.column-1-j,f&&(p=f>0?'Remove':'Add',f=Math.abs(f),c.warn(p+' '+f+' '+e('space',f)+' before this heading’s content',a(k[0])))}l==='atx-closed'&&(o=d(k[k.length-1]),f=d(i).column-o.column-1-n,f&&c.warn('Remove '+f+' '+e('space',f)+' after this heading’s content',o))}),j()}var f=c('../utilities/visit'),g=c('../utilities/heading-style'),e=c('../utilities/plural'),b=c('../utilities/position'),a=b.start,d=b.end;i.exports=h},{'../utilities/heading-style':59,'../utilities/plural':60,'../utilities/position':61,'../utilities/visit':63}],38:[function(a,f,h){'use strict';function g(h,f,j,i){var a=f.toString(),g=a.length;c(h,'heading',function(l){var h=e(l),j=h.offset,i=j-1,k,c;if(b.isGenerated(l))return;while(++i1&&b.warn('Do not indent table rows',c)})}),e()}var c=b('../utilities/visit'),a=b('../utilities/position');d.exports=e},{'../utilities/position':61,'../utilities/visit':63}],49:[function(c,a,d){'use strict';function b(f,b,g,e){var c=b.toString(),a=-1,d=c.length;while(++ac)if(d(b[a],a)===!1)return!1;return!0}function d(i,a,d,f){var g,e,h;typeof a==='function'&&(f=d,d=a,a=null),g=f?c:b,h=function(a,b){return g(a,function(a,c){return e(a,c,b)})},e=function(b,e,f){var c;return(!a||b.type===a)&&(c=d(b,e||0,f||null)),b.children&&c!==!1?h(b.children,b):c},e(i)}a.exports=d},{}],64:[function(i,c,j){'use strict';function e(b,c){function a(e){c(e);var b=e.children,d=-1,f=b?b.length:0;while(++dc)return{line:b+1,column:(c-a[b-1]||0)+1};return{}}return b}function d(i,c){var d=String(c).split('\n'),g;if(!c||typeof c.contents!=='string')throw new Error('Missing `file` for mdast-range');d=b(d),g=h(d),c.offsetToPosition=f(d),c.positionToOffset=g,e(i,function(c){var b=c.position;b&&b.start&&a(b.start,g),b&&b.end&&a(b.end,g)})}function g(){return d}c.exports=g},{}],65:[function(n,h,m){'use strict';function f(a){return new RegExp('(\\s*'+'\\s*'+')')}function j(b,c){function a(b,e){var d=this||null;c(b,d,e),b.children&&b.children.forEach(a,b)}a(b)}function g(c){var a={};return c.replace(b,function(g,c,d,e,f){var b=d||e||f||'';return b==='true'||b===''?b=!0:b==='false'?b=!1:isNaN(b)||(b=Number(b)),a[c]=b,''}),a}function a(a,b){function e(e,i){var f=e.value,c,h;return e.type!=='html'?null:(c=f.match(d),!c||c[1].length!==f.length||c[2]!==a.name?null:(h={type:c[3]||'marker',attributes:c[4]||'',parameters:g(c[4]||''),node:e},b&&b(h,i),h))}var c=a.name,d=f(c);return e}function d(e,b){var c=b.onparse,d=a(b,function(a,b){a.type==='marker'&&c(a,b)});return function(){var a=e.apply(this,arguments);return d(a,this),a}}function e(e,b){var c=b.onstringify,d=a(b,function(a,b){a.type==='marker'&&c(a,b)});return function(a){return d(a,this),e.apply(this,arguments)}}function k(h){function l(l,m,j){var a=k(l),h=a&&a.type;d&&m===d&&(h==='start'&&e++,h==='end'&&e--,h==='end'&&e===0?(b=i(f,b,a,{start:j-b.length-1,end:j,parent:d}),b&&c.apply(d.children,[g,j+1].concat(b)),f=null,d=null,g=null,b=[]):b.push(l)),!d&&h==='start'&&(e=1,g=j,f=a,d=m)}var i=h.onrun,k=a(h),b=[],f=null,d=null,e=0,g;return function(a){j(a,l)}}function l(b,a){var c=b.Parser.prototype.blockTokenizers,f=b.Parser.prototype.inlineTokenizers,g=b.Compiler.prototype;return a.onparse&&(c.html=d(c.html,a),f.tag=d(f.tag,a)),a.onstringify&&(g.html=e(g.html,a)),a.onrun?k(a):null}function i(a){if(!(a&&a.name))throw new Error('Missing `name` in `options`');return function(b){return l(b,a)}}var c=[].splice,b=new RegExp('\\s*([-a-z09_]+)(?:=(?:"((?:\\\\[\\s\\S]|[^"])+)"|\'((?:\\\\[\\s\\S]|[^\'])+)\'|((?:\\\\[\\s\\S]|[^"\'\\s])+)))?\\s*','gi');h.exports=i},{}]},{},[1])(1)}) +!function(b,a){typeof exports==='object'&&typeof module!=='undefined'?module.exports=b():typeof define==='function'&&define.amd?define([],b):(typeof window!=='undefined'?a=window:typeof global!=='undefined'?a=global:typeof self!=='undefined'?a=self:a=this,a.mdastLint=b())}(function(){return function a(b,c,e){function f(d,k){if(!c[d]){if(!b[d]){var i=typeof require=='function'&&require;if(!k&&i)return i(d,!0);if(g)return g(d,!0);var j=new Error("Cannot find module '"+d+"'");throw j.code='MODULE_NOT_FOUND',j}var h=c[d]={exports:{}};b[d][0].call(h.exports,function(c){var a=b[d][1][c];return f(a?a:c)},h,h.exports,a,b,c,e)}return c[d].exports}var g=typeof require=='function'&&require;for(var d=0;df)if(c=d[e],c.position.line0?'Add':'Remove',d=Math.abs(d),d!==0&&g.warn(i+' '+d+' '+f('space',d)+' between blockquote and content',a.start(e.children[0]))):b=c(e)}),h()}var d=b('../utilities/visit'),e=b('../utilities/to-string'),f=b('../utilities/plural'),a=b('../utilities/position');g.exports=h},{'../utilities/plural':61,'../utilities/position':62,'../utilities/to-string':63,'../utilities/visit':64}],5:[function(f,i,j){'use strict';function h(j,h,f,k){var i=h.toString();(f==='consistent'||typeof f!=='object')&&(f={}),f.unchecked||(f.unchecked=null),f.checked||(f.checked=null),f.unchecked!==null&&e[f.unchecked]!==!0&&h.fail('Invalid unchecked checkbox marker `'+f.unchecked+"`: use either `'\\t'`, or `' '`"),f.checked!==null&&g[f.checked]!==!0&&h.fail('Invalid checked checkbox marker `'+f.checked+"`: use either `'x'`, or `'X'`"),c(j,'listItem',function(c){var e,k,n,l,g,j,m;if(c.checked!==Boolean(c.checked)||a.isGenerated(c))return;e=c.checked?'checked':'unchecked',k=b(c).offset,n=(c.children.length?b(c.children[0]):d(c)).offset,g=i.slice(k,n).trimRight().slice(0,-1),m=g.charAt(g.length-1),j=f[e],j===null?f[e]=m:m!==j&&(l=k+g.length,h.warn(e.charAt(0).toUpperCase()+e.slice(1)+' checkboxes should use `'+j+'` as a marker',{start:h.offsetToPosition(l-1),end:h.offsetToPosition(l)}))}),k()}var c=f('../utilities/visit'),a=f('../utilities/position'),b=a.start,d=a.end,g={x:!0,X:!0},e={' ':!0,' ':!0};i.exports=h},{'../utilities/position':62,'../utilities/visit':64}],6:[function(b,g,i){'use strict';function h(i,g,b,j){function k(b){var c=d(b).offset,f=e(b).offset;return a.isGenerated(b)?null:b.lang||/^\s*([~`])\1{2,}/.test(h.slice(c,f))?'fenced':'indented'}var h=g.toString();if(b=typeof b!=='string'||b==='consistent'?null:b,f[b]!==!0){g.fail('Invalid code block style `'+b+"`: use either `'consistent'`, `'fenced'`, or `'indented'`");return}c(i,'code',function(c){var a=k(c);if(!a)return;b?b!==a&&g.warn('Code blocks should be '+b,c):b=a}),j()}var c=b('../utilities/visit'),a=b('../utilities/position'),d=a.start,e=a.end,f={null:!0,fenced:!0,indented:!0};g.exports=h},{'../utilities/position':62,'../utilities/visit':64}],7:[function(c,e,g){'use strict';function f(c,e,i,h){function f(b){var f=a.start(b).offset,h=a.end(b).offset,c;if(a.isGenerated(b))return;c=g.slice(f,h).match(d)[1],c!==c.toLowerCase()&&e.warn('Do not use uppper-case characters in definition labels',b)}var g=e.toString();b(c,'definition',f),b(c,'footnoteDefinition',f),h()}var b=c('../utilities/visit'),a=c('../utilities/position'),d=/^\s*\[((?:\\[\s\S]|[^\[\]])+)\]/;e.exports=f},{'../utilities/position':62,'../utilities/visit':64}],8:[function(c,e,g){'use strict';function f(c,e,i,h){function f(b){var c=a.start(b).offset,f=a.end(b).offset,h;if(a.isGenerated(b))return;h=g.slice(c,f).match(d)[1],/[ \t\n]{2,}/.test(h)&&e.warn('Do not use consecutive white-space in definition labels',b)}var g=e.toString();b(c,'definition',f),b(c,'footnoteDefinition',f),h()}var b=c('../utilities/visit'),a=c('../utilities/position'),d=/^\s*\[((?:\\[\s\S]|[^\[\]])+)\]/;e.exports=f},{'../utilities/position':62,'../utilities/visit':64}],9:[function(b,e,g){'use strict';function f(f,e,b,g){if(b=typeof b!=='string'||b==='consistent'?null:b,d[b]!==!0){e.fail('Invalid emphasis marker `'+b+"`: use either `'consistent'`, `'*'`, or `'_'`");return}c(f,'emphasis',function(c){var d=e.toString().charAt(a.start(c).offset);if(a.isGenerated(c))return;b?d!==b&&e.warn('Emphasis should use `'+b+'` as a marker',c):b=d}),g()}var c=b('../utilities/visit'),a=b('../utilities/position'),d={'*':!0,_:!0,null:!0};e.exports=f},{'../utilities/position':62,'../utilities/visit':64}],10:[function(b,f,h){'use strict';function g(j,g,b,k){var i=g.toString(),h=!1,f=[];typeof b==='object'&&!('length'in b)&&(h=Boolean(b.allowEmpty),b=b.flags),typeof b==='object'&&'length'in b&&(f=String(b).split(',')),c(j,'code',function(b){var c=i.slice(d(b).offset,e(b).offset);if(a.isGenerated(b))return;b.lang?f.length&&f.indexOf(b.lang)===-1&&g.warn('Invalid code-language flag',b):/^\ {0,3}([~`])\1{2,}/.test(c)&&!h&&g.warn('Missing code-language flag',b)}),k()}var c=b('../utilities/visit'),a=b('../utilities/position'),d=a.start,e=a.end;f.exports=g},{'../utilities/position':62,'../utilities/visit':64}],11:[function(c,e,g){'use strict';function f(g,e,c,h){var f=e.toString();if(c=typeof c!=='string'||c==='consistent'?null:c,b[c]!==!0){e.fail('Invalid fenced code marker `'+c+"`: use either `'consistent'`, `` '`' ``, or `'~'`");return}d(g,'code',function(g){var d=f.substr(a.start(g).offset,4);if(a.isGenerated(g))return;if(d=d.trimLeft().charAt(0),b[d]!==!0)return;c?d!==c&&e.warn('Fenced code should use '+c+' as a marker',g):c=d}),h()}var d=c('../utilities/visit'),a=c('../utilities/position'),b={'`':!0,'~':!0,null:!0};e.exports=f},{'../utilities/position':62,'../utilities/visit':64}],12:[function(c,a,d){'use strict';function b(e,c,a,d){var b=c.extension;a=typeof a==='string'?a:'md',b!==''&&b!==a&&c.warn('Invalid extension: use `'+a+'`'),d()}a.exports=b},{}],13:[function(b,e,g){'use strict';function f(e,f,h,g){var b=null;c(e,function(c){var e=d(c).line;if(c.type==='root'||a.isGenerated(c))return;c.type==='definition'?b!==null&&b>e&&f.warn('Move definitions to the end of the file (after the node at line `'+b+'`)',c):b===null&&(b=e)},!0),g()}var c=b('../utilities/visit'),a=b('../utilities/position'),d=a.start;e.exports=f},{'../utilities/position':62,'../utilities/visit':64}],14:[function(c,a,d){'use strict';function b(e,c,f,d){var a=c.toString(),b=a.length-1;b>0&&a.charAt(b)!=='\n'&&c.warn('Missing newline character at end of file'),d()}a.exports=b},{}],15:[function(a,d,f){'use strict';function e(a,d,f,e){b(a,'heading',function(a){return c.isGenerated(a)?null:(a.depth!==1&&d.warn('First heading level should be `1`',a),!1)}),e()}var b=a('../utilities/visit'),c=a('../utilities/position');d.exports=e},{'../utilities/position':62,'../utilities/visit':64}],16:[function(b,d,f){'use strict';function e(e,b,g,f){var d=b.toString();c(e,'break',function(c){var e=a.start(c).offset,f=a.end(c).offset;if(a.isGenerated(c))return;d.slice(e,f).length>3&&b.warn('Use two spaces for hard line breaks',c)}),f()}var c=b('../utilities/visit'),a=b('../utilities/position');d.exports=e},{'../utilities/position':62,'../utilities/visit':64}],17:[function(a,d,f){'use strict';function e(d,e,g,f){var a=null;b(d,'heading',function(b){var d=b.depth;if(c.isGenerated(b))return;a&&d>a+1&&e.warn('Heading levels should increment by one level at a time',b),a=d}),f()}var b=a('../utilities/visit'),c=a('../utilities/position');d.exports=e},{'../utilities/position':62,'../utilities/visit':64}],18:[function(a,f,h){'use strict';function g(f,g,a,h){a=e.indexOf(a)===-1?null:a,c(f,'heading',function(c){if(d.isGenerated(c))return;a?b(c,a)!==a&&g.warn('Headings should use '+a,c):a=b(c,a)}),h()}var c=a('../utilities/visit'),b=a('../utilities/heading-style'),d=a('../utilities/position'),e=['atx','atx-closed','setext'];f.exports=g},{'../utilities/heading-style':60,'../utilities/position':62,'../utilities/visit':64}],19:[function(a,b,c){'use strict';b.exports={'no-auto-link-without-protocol':a('./no-auto-link-without-protocol'),'no-literal-urls':a('./no-literal-urls'),'no-consecutive-blank-lines':a('./no-consecutive-blank-lines'),'no-missing-blank-lines':a('./no-missing-blank-lines'),'blockquote-indentation':a('./blockquote-indentation'),'no-blockquote-without-caret':a('./no-blockquote-without-caret'),'code-block-style':a('./code-block-style'),'checkbox-character-style':a('./checkbox-character-style'),'definition-case':a('./definition-case'),'definition-spacing':a('./definition-spacing'),'no-emphasis-as-heading':a('./no-emphasis-as-heading'),'emphasis-marker':a('./emphasis-marker'),'fenced-code-flag':a('./fenced-code-flag'),'fenced-code-marker':a('./fenced-code-marker'),'file-extension':a('./file-extension'),'final-newline':a('./final-newline'),'no-file-name-articles':a('./no-file-name-articles'),'no-file-name-consecutive-dashes':a('./no-file-name-consecutive-dashes'),'no-file-name-irregular-characters':a('./no-file-name-irregular-characters'),'no-file-name-mixed-case':a('./no-file-name-mixed-case'),'no-file-name-outer-dashes':a('./no-file-name-outer-dashes'),'final-definition':a('./final-definition'),'hard-break-spaces':a('./hard-break-spaces'),'heading-increment':a('./heading-increment'),'no-heading-content-indent':a('./no-heading-content-indent'),'no-heading-indent':a('./no-heading-indent'),'first-heading-level':a('./first-heading-level'),'maximum-heading-length':a('./maximum-heading-length'),'no-heading-punctuation':a('./no-heading-punctuation'),'heading-style':a('./heading-style'),'no-multiple-toplevel-headings':a('./no-multiple-toplevel-headings'),'no-duplicate-headings':a('./no-duplicate-headings'),'no-duplicate-definitions':a('./no-duplicate-definitions'),'no-html':a('./no-html'),'no-inline-padding':a('./no-inline-padding'),'maximum-line-length':a('./maximum-line-length'),'link-title-style':a('./link-title-style'),'list-item-bullet-indent':a('./list-item-bullet-indent'),'list-item-content-indent':a('./list-item-content-indent'),'list-item-indent':a('./list-item-indent'),'list-item-spacing':a('./list-item-spacing'),'ordered-list-marker-style':a('./ordered-list-marker-style'),'ordered-list-marker-value':a('./ordered-list-marker-value'),'no-shortcut-reference-image':a('./no-shortcut-reference-image'),'no-shortcut-reference-link':a('./no-shortcut-reference-link'),'rule-style':a('./rule-style'),'no-shell-dollars':a('./no-shell-dollars'),'strong-marker':a('./strong-marker'),'no-table-indentation':a('./no-table-indentation'),'table-pipe-alignment':a('./table-pipe-alignment'),'table-cell-padding':a('./table-cell-padding'),'table-pipes':a('./table-pipes'),'no-tabs':a('./no-tabs'),'unordered-list-marker-style':a('./unordered-list-marker-style')}},{'./blockquote-indentation':4,'./checkbox-character-style':5,'./code-block-style':6,'./definition-case':7,'./definition-spacing':8,'./emphasis-marker':9,'./fenced-code-flag':10,'./fenced-code-marker':11,'./file-extension':12,'./final-definition':13,'./final-newline':14,'./first-heading-level':15,'./hard-break-spaces':16,'./heading-increment':17,'./heading-style':18,'./link-title-style':20,'./list-item-bullet-indent':21,'./list-item-content-indent':22,'./list-item-indent':23,'./list-item-spacing':24,'./maximum-heading-length':25,'./maximum-line-length':26,'./no-auto-link-without-protocol':27,'./no-blockquote-without-caret':28,'./no-consecutive-blank-lines':29,'./no-duplicate-definitions':30,'./no-duplicate-headings':31,'./no-emphasis-as-heading':32,'./no-file-name-articles':33,'./no-file-name-consecutive-dashes':34,'./no-file-name-irregular-characters':35,'./no-file-name-mixed-case':36,'./no-file-name-outer-dashes':37,'./no-heading-content-indent':38,'./no-heading-indent':39,'./no-heading-punctuation':40,'./no-html':41,'./no-inline-padding':42,'./no-literal-urls':43,'./no-missing-blank-lines':44,'./no-multiple-toplevel-headings':45,'./no-shell-dollars':46,'./no-shortcut-reference-image':47,'./no-shortcut-reference-link':48,'./no-table-indentation':49,'./no-tabs':50,'./ordered-list-marker-style':51,'./ordered-list-marker-value':52,'./rule-style':53,'./strong-marker':54,'./table-cell-padding':55,'./table-pipe-alignment':56,'./table-pipes':57,'./unordered-list-marker-style':58}],20:[function(d,f,h){'use strict';function g(g,f,d,j){function h(h){var a=e(h).offset-1,g,j;if(b.isGenerated(h))return;h.type!=='definition'&&a--;while(a){if(g=i.charAt(a),!/\s/.test(g))break;a--}if(!(g in c))return;d?d!==g&&(j=f.offsetToPosition(a+1),f.warn(d===')'?'Titles should use `()` as a quote':'Titles should use `'+d+'` as a quote',j)):d=g}var i=f.toString();if(d=typeof d!=='string'||d==='consistent'?null:d,(d==='()'||d==='(')&&(d=')'),c[d]!==!0){f.fail('Invalid link title style marker `'+d+"`: use either `'consistent'`, `'\"'`, `'\\''`, or `'()'`");return}a(g,'link',h),a(g,'image',h),a(g,'definition',h),j()}var a=d('../utilities/visit'),b=d('../utilities/position'),c={'"':!0,"'":!0,')':!0,null:!0},e=b.end;f.exports=g},{'../utilities/position':62,'../utilities/visit':64}],21:[function(b,f,h){'use strict';function g(g,b,i,h){var f=b.toString();d(g,'list',function(d){var g=d.children;g.forEach(function(j){var i=j.children[0],g=a(j).offset,k=a(i).offset,h;if(c.isGenerated(d))return;h=f.slice(g,k).match(/^\s*/)[0].length,h!==0&&(g=a(i),b.warn('Incorrect indentation before bullet: remove '+h+' '+e('space',h),{line:g.line,column:g.column-h}))})}),h()}var d=b('../utilities/visit'),c=b('../utilities/position'),e=b('../utilities/plural'),a=c.start;f.exports=g},{'../utilities/plural':61,'../utilities/position':62,'../utilities/visit':64}],22:[function(a,f,h){'use strict';function g(g,a,i,h){var f=a.toString();d(g,'listItem',function(d){var g;d.children.forEach(function(l,n){var j=c(l),h=j.column,k,i,m;if(b.isGenerated(l))return;if(n===0){if(Boolean(d.checked)===d.checked){k=j.offset;while(f.charAt(k)!=='[')k--;h-=j.offset-k}g=h;return}h!==g&&(i=g-h,m=i>0?'add':'remove',i=Math.abs(i),a.warn('Don’t use mixed indentation for children, '+m+' '+i+' '+e('space',i),{line:c(l).line,column:h}))})}),h()}var d=a('../utilities/visit'),b=a('../utilities/position'),e=a('../utilities/plural'),c=b.start;f.exports=g},{'../utilities/plural':61,'../utilities/position':62,'../utilities/visit':64}],23:[function(b,g,i){'use strict';function h(i,g,b,j){var h=g.toString();if(b=typeof b!=='string'?'tab-size':b,f[b]!==!0){g.fail('Invalid list-item indent style `'+b+"`: use either `'tab-size'`, `'space'`, or `'mixed'`");return}d(i,'list',function(d){var f=d.children,i=d.ordered,j=d.start||1;if(c.isGenerated(d))return;f.forEach(function(r,s){var m=r.children[0],l=i?String(j+s).length+1:1,n=Math.ceil(l/4)*4,o=a(r).offset,p=a(m).offset,f,k,c,q;f=h.slice(o,p),f=f.replace(/\[[x ]?\]\s*$/i,''),b==='tab-size'?k=n:b==='space'?k=l+1:k=d.loose?n:l+1,f.length!==k&&(c=k-f.length,q=c>0?'add':'remove',c=Math.abs(c),g.warn('Incorrect list-item indent: '+q+' '+c+' '+e('space',c),a(m)))})}),j()}var d=b('../utilities/visit'),c=b('../utilities/position'),e=b('../utilities/plural'),a=c.start,f={'tab-size':!0,mixed:!0,space:!0};g.exports=h},{'../utilities/plural':61,'../utilities/position':62,'../utilities/visit':64}],24:[function(d,f,h){'use strict';function g(d,f,h,g){e(d,'list',function(g){var d=g.children,e=!0,h=b(g).column,i;if(a.isGenerated(g))return;d.forEach(function(h){var a=h.children,d=a[0],f=a[a.length-1],g=c(f).line-b(d).line>0;g&&(e=!1)}),i=e?'tight':'loose',d.forEach(function(g,k){var a=d[k+1],j=c(g).column>h;if(!a)return;j!==e&&f.warn('List item should be '+i+', isn’t',{start:c(g),end:b(a)})})}),g()}var e=d('../utilities/visit'),a=d('../utilities/position'),b=a.start,c=a.end;f.exports=g},{'../utilities/position':62,'../utilities/visit':64}],25:[function(a,e,g){'use strict';function f(e,f,a,g){a=isNaN(a)||typeof a!=='number'?60:a,b(e,'heading',function(b){if(d.isGenerated(b))return;c(b).length>a&&f.warn('Use headings shorter than `'+a+'`',b)}),g()}var b=a('../utilities/visit'),c=a('../utilities/to-string'),d=a('../utilities/position');e.exports=f},{'../utilities/position':62,'../utilities/to-string':63,'../utilities/visit':64}],26:[function(e,f,i){'use strict';function g(a){return a.type==='heading'||a.type==='table'||a.type==='code'}function h(k,l,j,q){function p(a,b){a--;while(++ae||h.columne&&l.warn('Line must be at most '+e+' characters',{line:h+1,column:i+1});q()}var b=e('../utilities/visit'),a=e('../utilities/position'),c=a.start,d=a.end;f.exports=h},{'../utilities/position':62,'../utilities/visit':64}],27:[function(d,j,k){'use strict';function i(a){return g.test(f(a))}function h(d,f,h,g){e(d,'link',function(d){var e=c(d.children[0]).column,g=b(d.children[d.children.length-1]).column,h=c(d).column,j=b(d).column;if(a.isGenerated(d))return;h===e-1&&j===g+1&&!i(d)&&f.warn('All automatic links must start with a protocol',d)}),g()}var e=d('../utilities/visit'),f=d('../utilities/to-string'),a=d('../utilities/position'),c=a.start,b=a.end,g=/^[a-z][a-z+.-]+:\/?/i;j.exports=h},{'../utilities/position':62,'../utilities/to-string':63,'../utilities/visit':64}],28:[function(b,d,f){'use strict';function e(f,b,h,g){var d=b.toString(),e=d.length;c(f,'blockquote',function(c){var g=a.start(c).line,f=c.position&&c.position.indent;if(a.isGenerated(c)||!f||!f.length)return;f.forEach(function(h,i){var a,c=g+i+1,f=b.positionToOffset({line:c,column:h})-1;while(++f')return;if(a!==' '&&a!==' ')break}b.warn('Missing caret in blockquote',{line:c,column:h})})}),g()}var c=b('../utilities/visit'),a=b('../utilities/position');d.exports=e},{'../utilities/position':62,'../utilities/visit':64}],29:[function(b,f,h){'use strict';function g(f,g,i,h){function b(e,b,f){var a=b.line-e.line,c=a>0?'before':'after';a=Math.abs(a)-f,a>0&&g.warn('Remove '+a+' '+d('line',a)+' '+c+' node',b)}c(f,function(d){var c=d.children;if(a.isGenerated(d))return;c&&c[0]&&(b(a.start(d),a.start(c[0]),0),c.forEach(function(f,h){var d=c[h-1],g=e;if(!d)return;(d.type==='list'&&f.type==='list'||f.type==='code'&&d.type==='list'&&!f.lang)&&g++,b(a.end(d),a.start(f),g)}),b(a.end(d),a.end(c[c.length-1]),1))}),h()}var c=b('../utilities/visit'),a=b('../utilities/position'),d=b('../utilities/plural'),e=2;f.exports=g},{'../utilities/plural':61,'../utilities/position':62,'../utilities/visit':64}],30:[function(c,d,f){'use strict';function e(d,f,h,g){function e(b){var d=c[b.identifier],e;if(a.isGenerated(b))return;d&&d.type&&(e=a.start(d),f.warn('Do not use definitions with the same identifier ('+e.line+':'+e.column+')',b)),c[b.identifier]=b}var c={};b(d,'definition',e),b(d,'footnoteDefinition',e),g()}var a=c('../utilities/position'),b=c('../utilities/visit');d.exports=e},{'../utilities/position':62,'../utilities/visit':64}],31:[function(a,e,g){'use strict';function f(e,f,h,g){var a={};c(e,'heading',function(c){var g=d(c).toUpperCase(),e=a[g],h;if(b.isGenerated(c))return;e&&e.type==='heading'&&(h=b.start(e),f.warn('Do not use headings with similar content ('+h.line+':'+h.column+')',c)),a[g]=c}),g()}var b=a('../utilities/position'),c=a('../utilities/visit'),d=a('../utilities/to-string');e.exports=f},{'../utilities/position':62,'../utilities/to-string':63,'../utilities/visit':64}],32:[function(a,e,g){'use strict';function f(a,e,g,f){b(a,'paragraph',function(b,j,k){var f=b.children,a=f[0],g=k.children[j-1],h=k.children[j+1],i;if(d.isGenerated(b))return;(!g||g.type!=='heading')&&h&&h.type==='paragraph'&&f.length===1&&(a.type==='emphasis'||a.type==='strong')&&(i=c(a),i.charAt(i.length-1)===':'&&e.warn('Don’t use emphasis to introduce a section, use a heading',b))}),f()}var b=a('../utilities/visit'),c=a('../utilities/to-string'),d=a('../utilities/position');e.exports=f},{'../utilities/position':62,'../utilities/to-string':63,'../utilities/visit':64}],33:[function(c,a,d){'use strict';function b(d,a,e,c){var b=a.filename&&a.filename.match(/^(the|an?)\b/i);b&&a.warn('Do not start file names with `'+b[0]+'`'),c()}a.exports=b},{}],34:[function(c,a,d){'use strict';function b(c,a,d,b){a.filename&&/-{2,}/.test(a.filename)&&a.warn('Do not use consecutive dashes in a file name'),b()}a.exports=b},{}],35:[function(c,a,d){'use strict';function b(d,a,e,c){var b=a.filename&&a.filename.match(/[^.a-zA-Z0-9-]/);b&&a.warn('Do not use `'+b[0]+'` in a file name'),c()}a.exports=b},{}],36:[function(c,a,d){'use strict';function b(d,b,e,c){var a=b.filename;a&&!(a===a.toLowerCase()||a===a.toUpperCase())&&b.warn('Do not mix casing in file names'),c()}a.exports=b},{}],37:[function(c,a,d){'use strict';function b(c,a,d,b){a.filename&&/^-|-$/.test(a.filename)&&a.warn('Do not use initial or final dashes in a file name'),b()}a.exports=b},{}],38:[function(c,i,j){'use strict';function h(i,c,k,j){var h=c.toString();f(i,'heading',function(i){var n=i.depth,k=i.children,l=g(i,'atx'),m,o,f,p,j;if(b.isGenerated(i))return;if(l==='atx'||l==='atx-closed'){m=a(i),j=m.offset;while(h.charAt(j)!=='#')j++;j=n+(j-m.offset),f=a(k[0]).column-m.column-1-j,f&&(p=f>0?'Remove':'Add',f=Math.abs(f),c.warn(p+' '+f+' '+e('space',f)+' before this heading’s content',a(k[0])))}l==='atx-closed'&&(o=d(k[k.length-1]),f=d(i).column-o.column-1-n,f&&c.warn('Remove '+f+' '+e('space',f)+' after this heading’s content',o))}),j()}var f=c('../utilities/visit'),g=c('../utilities/heading-style'),e=c('../utilities/plural'),b=c('../utilities/position'),a=b.start,d=b.end;i.exports=h},{'../utilities/heading-style':60,'../utilities/plural':61,'../utilities/position':62,'../utilities/visit':64}],39:[function(a,f,h){'use strict';function g(h,f,j,i){var a=f.toString(),g=a.length;c(h,'heading',function(l){var h=e(l),j=h.offset,i=j-1,k,c;if(b.isGenerated(l))return;while(++i1&&b.warn('Do not indent table rows',c)})}),e()}var c=b('../utilities/visit'),a=b('../utilities/position');d.exports=e},{'../utilities/position':62,'../utilities/visit':64}],50:[function(c,a,d){'use strict';function b(f,b,g,e){var c=b.toString(),a=-1,d=c.length;while(++ac)if(d(b[a],a)===!1)return!1;return!0}function d(i,a,d,f){var g,e,h;typeof a==='function'&&(f=d,d=a,a=null),g=f?c:b,h=function(a,b){return g(a,function(a,c){return e(a,c,b)})},e=function(b,e,f){var c;return(!a||b.type===a)&&(c=d(b,e||0,f||null)),b.children&&c!==!1?h(b.children,b):c},e(i)}a.exports=d},{}],65:[function(i,c,j){'use strict';function e(b,c){function a(e){c(e);var b=e.children,d=-1,f=b?b.length:0;while(++dc)return{line:b+1,column:c-(a[b-1]||0)+1};return{}}return b}function d(i,c){var d=String(c).split('\n'),g;if(!c||typeof c.contents!=='string')throw new Error('Missing `file` for mdast-range');d=b(d),g=h(d),c.offsetToPosition=f(d),c.positionToOffset=g,e(i,function(c){var b=c.position;b&&b.start&&a(b.start,g),b&&b.end&&a(b.end,g)})}function g(){return d}c.exports=g},{}],66:[function(n,h,m){'use strict';function f(a){return new RegExp('(\\s*'+'\\s*'+')')}function j(b,c){function a(b,e){var d=this||null;c(b,d,e),b.children&&b.children.forEach(a,b)}a(b)}function g(c){var a={};return c.replace(b,function(g,c,d,e,f){var b=d||e||f||'';return b==='true'||b===''?b=!0:b==='false'?b=!1:isNaN(b)||(b=Number(b)),a[c]=b,''}),a}function a(a,b){function e(e,i){var f=e.value,c,h;return e.type!=='html'?null:(c=f.match(d),!c||c[1].length!==f.length||c[2]!==a.name?null:(h={type:c[3]||'marker',attributes:c[4]||'',parameters:g(c[4]||''),node:e},b&&b(h,i),h))}var c=a.name,d=f(c);return e}function d(e,b){var c=b.onparse,d=a(b,function(a,b){a.type==='marker'&&c(a,b)});return function(){var a=e.apply(this,arguments);return d(a,this),a}}function e(e,b){var c=b.onstringify,d=a(b,function(a,b){a.type==='marker'&&c(a,b)});return function(a){return d(a,this),e.apply(this,arguments)}}function k(h){function l(l,m,j){var a=k(l),h=a&&a.type;d&&m===d&&(h==='start'&&e++,h==='end'&&e--,h==='end'&&e===0?(b=i(f,b,a,{start:j-b.length-1,end:j,parent:d}),b&&c.apply(d.children,[g,j+1].concat(b)),f=null,d=null,g=null,b=[]):b.push(l)),!d&&h==='start'&&(e=1,g=j,f=a,d=m)}var i=h.onrun,k=a(h),b=[],f=null,d=null,e=0,g;return function(a){j(a,l)}}function l(b,a){var c=b.Parser.prototype.blockTokenizers,f=b.Parser.prototype.inlineTokenizers,g=b.Compiler.prototype;return a.onparse&&(c.html=d(c.html,a),f.tag=d(f.tag,a)),a.onstringify&&(g.html=e(g.html,a)),a.onrun?k(a):null}function i(a){if(!(a&&a.name))throw new Error('Missing `name` in `options`');return function(b){return l(b,a)}}var c=[].splice,b=new RegExp('\\s*([-a-z09_]+)(?:=(?:"((?:\\\\[\\s\\S]|[^"])+)"|\'((?:\\\\[\\s\\S]|[^\'])+)\'|((?:\\\\[\\s\\S]|[^"\'\\s])+)))?\\s*','gi');h.exports=i},{}]},{},[1])(1)}) diff --git a/package.json b/package.json index 6e580602..852362f5 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "lint": "npm run lint-api && npm run lint-style", "make": "npm run lint && npm run test-coverage", "build-rules": "node script/build-rule-documentation.js", - "build-md": "mdast . LICENSE --output", + "build-md": "mdast . LICENSE --output --quiet", "build-bundle": "browserify index.js --bare -s mdastLint > mdast-lint.js", "postbuild-bundle": "esmangle mdast-lint.js > mdast-lint.min.js", "build": "npm run build-rules && npm run build-md && npm run build-bundle", diff --git a/test/fixtures/checkbox-character-style-lower-x.md b/test/fixtures/checkbox-character-style-lower-x.md new file mode 100644 index 00000000..5d77f229 --- /dev/null +++ b/test/fixtures/checkbox-character-style-lower-x.md @@ -0,0 +1,7 @@ +* [x] Foo; + +- [x] Bar; + ++ [x] Baz; + +* [x] diff --git a/test/fixtures/checkbox-character-style-space.md b/test/fixtures/checkbox-character-style-space.md new file mode 100644 index 00000000..bd2be29f --- /dev/null +++ b/test/fixtures/checkbox-character-style-space.md @@ -0,0 +1,7 @@ +* [ ] Foo; + +- [ ] Bar; + ++ [ ] Baz; + +* [ ] diff --git a/test/fixtures/checkbox-character-style-tab.md b/test/fixtures/checkbox-character-style-tab.md new file mode 100644 index 00000000..e0f2e573 --- /dev/null +++ b/test/fixtures/checkbox-character-style-tab.md @@ -0,0 +1,7 @@ +* [ ] Foo; + +- [ ] Bar; + ++ [ ] Baz; + +* [ ] diff --git a/test/fixtures/checkbox-character-style-upper-x.md b/test/fixtures/checkbox-character-style-upper-x.md new file mode 100644 index 00000000..dd745875 --- /dev/null +++ b/test/fixtures/checkbox-character-style-upper-x.md @@ -0,0 +1,7 @@ +* [X] Foo; + +- [X] Bar; + ++ [X] Baz; + +* [X] diff --git a/test/index.js b/test/index.js index e7ff25d2..c36d000d 100644 --- a/test/index.js +++ b/test/index.js @@ -1725,6 +1725,83 @@ describe('Rules', function () { ]); }); }); + + describeRule('checkbox-character-style', function () { + describeSetting(true, function () { + assertFile('checkbox-character-style-lower-x.md', []); + assertFile('checkbox-character-style-upper-x.md', []); + assertFile('checkbox-character-style-space.md', []); + assertFile('checkbox-character-style-tab.md', []); + }); + + describeSetting({ + 'checked': '@' + }, function () { + assertFile('empty.md', [ + 'empty.md:1:1: Invalid checked checkbox marker `@`: use either `\'x\'`, or `\'X\'`' + ]); + }); + + describeSetting({ + 'unchecked': '@' + }, function () { + assertFile('empty.md', [ + 'empty.md:1:1: Invalid unchecked checkbox marker `@`: use either `\'\\t\'`, or `\' \'`' + ]); + }); + + describeSetting({ + 'checked': 'X' + }, function () { + assertFile('checkbox-character-style-lower-x.md', [ + 'checkbox-character-style-lower-x.md:1:6-1:7: Checked checkboxes should use `X` as a marker', + 'checkbox-character-style-lower-x.md:3:4-3:5: Checked checkboxes should use `X` as a marker', + 'checkbox-character-style-lower-x.md:5:5-5:6: Checked checkboxes should use `X` as a marker', + 'checkbox-character-style-lower-x.md:7:6-7:7: Checked checkboxes should use `X` as a marker' + ]); + + assertFile('checkbox-character-style-upper-x.md', []); + }); + + describeSetting({ + 'checked': 'x' + }, function () { + assertFile('checkbox-character-style-lower-x.md', []); + + assertFile('checkbox-character-style-upper-x.md', [ + 'checkbox-character-style-upper-x.md:1:6-1:7: Checked checkboxes should use `x` as a marker', + 'checkbox-character-style-upper-x.md:3:4-3:5: Checked checkboxes should use `x` as a marker', + 'checkbox-character-style-upper-x.md:5:5-5:6: Checked checkboxes should use `x` as a marker', + 'checkbox-character-style-upper-x.md:7:6-7:7: Checked checkboxes should use `x` as a marker' + ]); + }); + + describeSetting({ + 'unchecked': ' ' + }, function () { + assertFile('checkbox-character-style-space.md', []); + + assertFile('checkbox-character-style-tab.md', [ + 'checkbox-character-style-tab.md:1:6-1:7: Unchecked checkboxes should use ` ` as a marker', + 'checkbox-character-style-tab.md:3:4-3:5: Unchecked checkboxes should use ` ` as a marker', + 'checkbox-character-style-tab.md:5:5-5:6: Unchecked checkboxes should use ` ` as a marker', + 'checkbox-character-style-tab.md:7:6-7:7: Unchecked checkboxes should use ` ` as a marker' + ]); + }); + + describeSetting({ + 'unchecked': '\t' + }, function () { + assertFile('checkbox-character-style-space.md', [ + 'checkbox-character-style-space.md:1:6-1:7: Unchecked checkboxes should use `\t` as a marker', + 'checkbox-character-style-space.md:3:4-3:5: Unchecked checkboxes should use `\t` as a marker', + 'checkbox-character-style-space.md:5:5-5:6: Unchecked checkboxes should use `\t` as a marker', + 'checkbox-character-style-space.md:7:6-7:7: Unchecked checkboxes should use `\t` as a marker' + ]); + + assertFile('checkbox-character-style-tab.md', []); + }); + }); }); /*