Update MD013/line-length with new code_block_line_length parameter (fixes #184).

This commit is contained in:
David Anson 2019-06-07 19:57:15 -07:00
parent 1d8b9e7e62
commit 64351f73be
6 changed files with 59 additions and 4 deletions

View file

@ -443,14 +443,15 @@ Tags: line_length
Aliases: line-length Aliases: line-length
Parameters: line_length, heading_line_length, code_blocks, tables, headings, headers (number; default 80, boolean; default true) Parameters: line_length, heading_line_length, code_block_line_length, code_blocks, tables, headings, headers (number; default 80, boolean; default true)
> If `headings` is not provided, `headers` (deprecated) will be used. > If `headings` is not provided, `headers` (deprecated) will be used.
This rule is triggered when there are lines that are longer than the This rule is triggered when there are lines that are longer than the
configured `line_length` (default: 80 characters). To fix this, split the line configured `line_length` (default: 80 characters). To fix this, split the line
up into multiple lines. To set a different maximum length for headings, use up into multiple lines. To set a different maximum length for headings, use
`heading_line_length`. `heading_line_length`. To set a different maximum length for code blocks, use
`code_block_line_length`
This rule has an exception where there is no whitespace beyond the configured This rule has an exception where there is no whitespace beyond the configured
line length. This allows you to still include items such as long URLs without line length. This allows you to still include items such as long URLs without

View file

@ -27,10 +27,13 @@ module.exports = {
"function": function MD013(params, onError) { "function": function MD013(params, onError) {
const lineLength = params.config.line_length || 80; const lineLength = params.config.line_length || 80;
const headingLineLength = params.config.heading_line_length || lineLength; const headingLineLength = params.config.heading_line_length || lineLength;
const codeLineLength = params.config.code_block_line_length || lineLength;
const longLineRe = const longLineRe =
new RegExp(longLineRePrefix + lineLength + longLineRePostfix); new RegExp(longLineRePrefix + lineLength + longLineRePostfix);
const longHeadingLineRe = const longHeadingLineRe =
new RegExp(longLineRePrefix + headingLineLength + longLineRePostfix); new RegExp(longLineRePrefix + headingLineLength + longLineRePostfix);
const longCodeLineRe =
new RegExp(longLineRePrefix + codeLineLength + longLineRePostfix);
const codeBlocks = params.config.code_blocks; const codeBlocks = params.config.code_blocks;
const includeCodeBlocks = (codeBlocks === undefined) ? true : !!codeBlocks; const includeCodeBlocks = (codeBlocks === undefined) ? true : !!codeBlocks;
const tables = params.config.tables; const tables = params.config.tables;
@ -59,8 +62,12 @@ module.exports = {
forEachLine(lineMetadata(), (line, lineIndex, inCode, onFence, inTable) => { forEachLine(lineMetadata(), (line, lineIndex, inCode, onFence, inTable) => {
const lineNumber = lineIndex + 1; const lineNumber = lineIndex + 1;
const isHeading = includesSorted(headingLineNumbers, lineNumber); const isHeading = includesSorted(headingLineNumbers, lineNumber);
const length = isHeading ? headingLineLength : lineLength; const length = inCode ?
const lengthRe = isHeading ? longHeadingLineRe : longLineRe; codeLineLength :
(isHeading ? headingLineLength : lineLength);
const lengthRe = inCode ?
longCodeLineRe :
(isHeading ? longHeadingLineRe : longLineRe);
if ((includeCodeBlocks || !inCode) && if ((includeCodeBlocks || !inCode) &&
(includeTables || !inTable) && (includeTables || !inTable) &&
(includeHeadings || !isHeading) && (includeHeadings || !isHeading) &&

View file

@ -134,6 +134,11 @@ rules.forEach(function forRule(rule) {
"type": "integer", "type": "integer",
"default": 80 "default": 80
}, },
"code_block_line_length": {
"description": "Number of characters for code blocks",
"type": "integer",
"default": 80
},
"code_blocks": { "code_blocks": {
"description": "Include code blocks", "description": "Include code blocks",
"type": "boolean", "type": "boolean",

View file

@ -379,6 +379,11 @@
"type": "integer", "type": "integer",
"default": 80 "default": 80
}, },
"code_block_line_length": {
"description": "Number of characters for code blocks",
"type": "integer",
"default": 80
},
"code_blocks": { "code_blocks": {
"description": "Include code blocks", "description": "Include code blocks",
"type": "boolean", "type": "boolean",
@ -420,6 +425,11 @@
"type": "integer", "type": "integer",
"default": 80 "default": 80
}, },
"code_block_line_length": {
"description": "Number of characters for code blocks",
"type": "integer",
"default": 80
},
"code_blocks": { "code_blocks": {
"description": "Include code blocks", "description": "Include code blocks",
"type": "boolean", "type": "boolean",

View file

@ -0,0 +1,7 @@
{
"default": true,
"MD013": {
"code_block_line_length": 30
},
"MD046": false
}

View file

@ -0,0 +1,25 @@
# Long Lines, Short Code
Text text text text text text text text text text text text text text text
Text text text text text text text text text text text text text text text text text {MD013}
Text
Code code code code
Text
Code code code code code code code {MD013}
Text
```text
Code code code code code
```
Text
```text
Code code code code code code code code {MD013}
```