mdl 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +8 -6
- data/CHANGELOG.md +48 -28
- data/README.md +7 -2
- data/docs/RULES.md +13 -1
- data/docs/configuration.md +10 -0
- data/docs/rolling_a_release.md +19 -11
- data/lib/mdl.rb +2 -1
- data/lib/mdl/cli.rb +14 -7
- data/lib/mdl/doc.rb +17 -4
- data/lib/mdl/rules.rb +11 -8
- data/lib/mdl/version.rb +1 -1
- data/mdl.gemspec +6 -6
- data/test/fixtures/front_matter/jekyll_post.md +16 -0
- data/test/rule_tests/alternate_top_level_header.md +3 -0
- data/test/rule_tests/alternate_top_level_header_style.rb +4 -0
- data/test/rule_tests/headers_surrounding_space_atx.md +4 -1
- data/test/rule_tests/headers_with_spaces_at_the_beginning.md +12 -1
- data/test/rule_tests/long_lines_code.md +7 -0
- data/test/test_cli.rb +142 -54
- metadata +27 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e51fd852e7791bcde9513e139c43c93fc0377ec3
|
4
|
+
data.tar.gz: d566428c48d875eb1bd0f89e4cdff094f50a23d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd7a9864461857232915798e54111bfeaf3cc957b53fed0dc74bc28e94496e13616f91be2e2b930f38fcbb1581108f8e41e4dd5e642eb6f2cd411becb31376a8
|
7
|
+
data.tar.gz: d561fd970ab869fb6a43780e19b20d861e4f46a48e891bfc9e5e99c464afcfc0295715e22f2c2986ca0b70f91c7b0b3b41b660519586d5ffa3eed705f63f9527
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,28 +1,36 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [v0.
|
3
|
+
## [v0.4.0] (2016-08-22)
|
4
4
|
|
5
|
-
|
5
|
+
### Added
|
6
6
|
|
7
|
-
|
7
|
+
* Ignore yaml front matter option (#130, #143)
|
8
8
|
|
9
|
-
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
* Allow top level header rules (MD002, MD025, MD041) to be configurable (#142)
|
10
12
|
|
11
|
-
|
13
|
+
### Fixed
|
12
14
|
|
13
|
-
|
15
|
+
* Read UTF-8 files correctly even if locale is set to C (#135, #146, #147,
|
16
|
+
#148)
|
17
|
+
* Fix issues loading .mdlrc file (#126, #129, #133, #148)
|
18
|
+
* Fix erroneous triggering of MD022/MD023 in some cases (#144)
|
19
|
+
* Detect codeblock lines correctly when ignoring them (#141)
|
14
20
|
|
15
|
-
|
21
|
+
## [v0.3.1] (2016-03-20)
|
22
|
+
|
23
|
+
### Fixed
|
24
|
+
|
25
|
+
* Fix error on starting mdl
|
26
|
+
|
27
|
+
## [v0.3.0] (2016-03-19)
|
28
|
+
|
29
|
+
### Rules added
|
16
30
|
|
17
31
|
* MD041 - First line in file should be a top level header
|
18
|
-
* MD003 - An additional header style, setext_with_atx, was added to require
|
19
|
-
setext style headers for levels 1 and 2, but allow atx style headers for
|
20
|
-
levels 3 and above (i.e. header levels that can't be expressed with setext
|
21
|
-
style headers)
|
22
|
-
* MD013 - You now have the option to exclude code blocks and tables from the
|
23
|
-
line length limit check.
|
24
32
|
|
25
|
-
###
|
33
|
+
### Added
|
26
34
|
|
27
35
|
* You can now load your own custom rules with the `-u` option. See
|
28
36
|
[rules.rb](https://github.com/mivok/markdownlint/blob/master/lib/mdl/rules.rb)
|
@@ -33,7 +41,16 @@
|
|
33
41
|
You can pass the `-a` option to display rule aliases instead of MDxxx rule
|
34
42
|
IDs.
|
35
43
|
|
36
|
-
###
|
44
|
+
### Changed
|
45
|
+
|
46
|
+
* MD003 - An additional header style, setext_with_atx, was added to require
|
47
|
+
setext style headers for levels 1 and 2, but allow atx style headers for
|
48
|
+
levels 3 and above (i.e. header levels that can't be expressed with setext
|
49
|
+
style headers)
|
50
|
+
* MD013 - You now have the option to exclude code blocks and tables from the
|
51
|
+
line length limit check.
|
52
|
+
|
53
|
+
### Fixed
|
37
54
|
|
38
55
|
* Crash with MD034 and pipe character (#93, #97)
|
39
56
|
* MD031 failed on nested code blocks (#100, #109)
|
@@ -53,11 +70,9 @@
|
|
53
70
|
* [MD013: allow excluding code blocks and tables - Loic
|
54
71
|
Nageleisen](https://github.com/mivok/markdownlint/pull/112)
|
55
72
|
|
56
|
-
## [v0.2.1]
|
57
|
-
|
58
|
-
[Full Changelog](https://github.com/mivok/markdownlint/compare/v0.2.0...v0.2.1)
|
73
|
+
## [v0.2.1] (2015-04-13)
|
59
74
|
|
60
|
-
###
|
75
|
+
### Fixed
|
61
76
|
|
62
77
|
* Incorrect parsing of rules/tags specification in .mdlrc (#81)
|
63
78
|
* Exception on image links with MD039 (#82)
|
@@ -67,9 +82,7 @@
|
|
67
82
|
|
68
83
|
* Exception on some lines with raw html list items in them (#83)
|
69
84
|
|
70
|
-
## [v0.2.0]
|
71
|
-
|
72
|
-
[Full Changelog](https://github.com/mivok/markdownlint/compare/v0.1.0...v0.2.0)
|
85
|
+
## [v0.2.0] (2015-04-13)
|
73
86
|
|
74
87
|
### Rules added
|
75
88
|
|
@@ -82,7 +95,7 @@
|
|
82
95
|
* MD039 - Spaces inside link text
|
83
96
|
* MD040 - Fenced code blocks should have a language specified
|
84
97
|
|
85
|
-
##
|
98
|
+
## Added
|
86
99
|
|
87
100
|
* Trailing spaces rule should allow an excemption for deliberate <br/\>
|
88
101
|
insertion.
|
@@ -93,16 +106,14 @@
|
|
93
106
|
|
94
107
|
* [Add parameter (value and default) information to rule documentation. - David Anson](https://github.com/mivok/markdownlint/pull/76)
|
95
108
|
|
96
|
-
## [v0.1.0]
|
97
|
-
|
98
|
-
[Full Changelog](https://github.com/mivok/markdownlint/compare/v0.0.1...v0.1.0)
|
109
|
+
## [v0.1.0] (2015-02-22)
|
99
110
|
|
100
111
|
### Rules added
|
101
112
|
|
102
113
|
* MD031 - Fenced code blocks should be surrounded by blank lines
|
103
114
|
* MD032 - Lists should be surrounded by blank lines
|
104
115
|
|
105
|
-
###
|
116
|
+
### Fixed
|
106
117
|
|
107
118
|
* MD014 triggers when it shouldn't
|
108
119
|
|
@@ -113,7 +124,7 @@
|
|
113
124
|
* [Clarify how to specify your own style - mjankowski](https://github.com/mivok/markdownlint/pull/65)
|
114
125
|
* [Use single quotes to prevent early escaping - highb](https://github.com/mivok/markdownlint/pull/64)
|
115
126
|
|
116
|
-
## [v0.0.1]
|
127
|
+
## [v0.0.1] (2014-09-07)
|
117
128
|
|
118
129
|
### Rules added
|
119
130
|
|
@@ -143,3 +154,12 @@
|
|
143
154
|
* MD028 - Blank line inside blockquote
|
144
155
|
* MD029 - Ordered list item prefix
|
145
156
|
* MD030 - Spaces after list markers
|
157
|
+
|
158
|
+
[Unreleased]: https://github.com/mivok/markdownlint/tree/master
|
159
|
+
[v0.4.0]: https://github.com/mivok/markdownlint/tree/v0.4.0
|
160
|
+
[v0.3.1]: https://github.com/mivok/markdownlint/tree/v0.3.1
|
161
|
+
[v0.3.0]: https://github.com/mivok/markdownlint/tree/v0.3.0
|
162
|
+
[v0.2.1]: https://github.com/mivok/markdownlint/tree/v0.2.1
|
163
|
+
[v0.2.0]: https://github.com/mivok/markdownlint/tree/v0.2.0
|
164
|
+
[v0.1.0]: https://github.com/mivok/markdownlint/tree/v0.1.0
|
165
|
+
[v0.0.1]: https://github.com/mivok/markdownlint/tree/v0.0.1
|
data/README.md
CHANGED
@@ -10,7 +10,7 @@ A tool to check markdown files and flag style issues.
|
|
10
10
|
|
11
11
|
Markdownlint is written in ruby and is distributed as a rubygem. As long as
|
12
12
|
you have a relatively up to date ruby on your system, markdownlint will be
|
13
|
-
simple to install and use.
|
13
|
+
simple to install and use. You have 2 options to install it:
|
14
14
|
|
15
15
|
To install from rubygems, run:
|
16
16
|
|
@@ -22,6 +22,11 @@ To install the latest development version from github:
|
|
22
22
|
cd markdownlint
|
23
23
|
rake install
|
24
24
|
|
25
|
+
|
26
|
+
Note that you will need [rake](https://github.com/ruby/rake)
|
27
|
+
(`gem install rake`) and [bundler](https://github.com/bundler/bundler)
|
28
|
+
(`gem install bundler`) in order to build from source.
|
29
|
+
|
25
30
|
## Usage
|
26
31
|
|
27
32
|
To have markdownlint check your markdown files, simply run `mdl` with the
|
@@ -74,7 +79,7 @@ For more information on creating style files, see the
|
|
74
79
|
|
75
80
|
## Contributing
|
76
81
|
|
77
|
-
1. Fork it ( http://github.com/mivok/markdownlint/fork )
|
82
|
+
1. Fork it ( <http://github.com/mivok/markdownlint/fork> )
|
78
83
|
1. Create your feature branch (`git checkout -b my-new-feature`)
|
79
84
|
1. Commit your changes (`git commit -am 'Add some feature'`)
|
80
85
|
1. Push to the branch (`git push origin my-new-feature`)
|
data/docs/RULES.md
CHANGED
@@ -35,12 +35,14 @@ level at a time:
|
|
35
35
|
### Another Header 3
|
36
36
|
|
37
37
|
|
38
|
-
## MD002 - First header should be a
|
38
|
+
## MD002 - First header should be a top level header
|
39
39
|
|
40
40
|
Tags: headers
|
41
41
|
|
42
42
|
Aliases: first-header-h1
|
43
43
|
|
44
|
+
Parameters: level (number; default 1)
|
45
|
+
|
44
46
|
This rule is triggered when the first header in the document isn't a h1 header:
|
45
47
|
|
46
48
|
## This isn't a H1 header
|
@@ -506,6 +508,8 @@ Tags: headers
|
|
506
508
|
|
507
509
|
Aliases: single-h1
|
508
510
|
|
511
|
+
Parameters: level (number; default 1)
|
512
|
+
|
509
513
|
This rule is triggered when a top level header is in use (the first line of
|
510
514
|
the file is a h1 header), and more than one h1 header is in use in the
|
511
515
|
document:
|
@@ -529,6 +533,9 @@ serves as the title for the document. If this convention is in use, then there
|
|
529
533
|
can not be more than one title for the document, and the entire document
|
530
534
|
should be contained within this header.
|
531
535
|
|
536
|
+
Note: The `level` parameter can be used to change the top level (ex: to h2) in
|
537
|
+
cases where an h1 is added externally.
|
538
|
+
|
532
539
|
## MD026 - Trailing punctuation in header
|
533
540
|
|
534
541
|
Tags: headers
|
@@ -968,6 +975,8 @@ Tags: headers
|
|
968
975
|
|
969
976
|
Aliases: first-line-h1
|
970
977
|
|
978
|
+
Parameters: level (number; default 1)
|
979
|
+
|
971
980
|
This rule is triggered when the first line in the file isn't a top level (h1)
|
972
981
|
header:
|
973
982
|
|
@@ -982,3 +991,6 @@ To fix this, add a header to the top of your file:
|
|
982
991
|
|
983
992
|
This is a file with a top level header
|
984
993
|
```
|
994
|
+
|
995
|
+
Note: The `level` parameter can be used to change the top level (ex: to h2) in
|
996
|
+
cases where an h1 is added externally.
|
data/docs/configuration.md
CHANGED
@@ -39,6 +39,16 @@ instead, and ignore any files git doesn't know about.
|
|
39
39
|
* Config file: `git_recurse true`
|
40
40
|
* Default: false
|
41
41
|
|
42
|
+
Ignore YAML front matter - if this option is enabled markdownlint will ignore
|
43
|
+
content within valid
|
44
|
+
[YAML front matter](https://jekyllrb.com/docs/frontmatter/). Reported line
|
45
|
+
numbers will still match the file contents but markdownlint will consider the
|
46
|
+
line following front matter to be the first line.
|
47
|
+
|
48
|
+
* Command line: `-i`, `--ignore-front-matter`
|
49
|
+
* Config file: `ignore-front-matter true`
|
50
|
+
* Default: false
|
51
|
+
|
42
52
|
### Specifying which rules mdl processes
|
43
53
|
|
44
54
|
Tags - Limit the rules mdl enables to those containing the provided tags.
|
data/docs/rolling_a_release.md
CHANGED
@@ -14,28 +14,36 @@ branch.
|
|
14
14
|
|
15
15
|
Update the changelog:
|
16
16
|
|
17
|
-
* Add a new header and
|
17
|
+
* Add a new header and link for the new release, replacing any 'Unreleased'
|
18
|
+
header.
|
18
19
|
|
19
|
-
## [v0.2.0]
|
20
|
+
## [v0.2.0] (2015-04-13)
|
20
21
|
|
21
|
-
|
22
|
+
This goes at the bottom:
|
22
23
|
|
23
|
-
|
24
|
+
[v0.2.0]: https://github.com/mivok/markdownlint/tree/v0.2.0
|
25
|
+
|
26
|
+
* Changelog entries can and should be added in an 'Unreleased' section as
|
27
|
+
commits are made. However, the following steps can be performed before each
|
28
|
+
release to catch anything that was missed.
|
29
|
+
* Add a 'Rules added' section, listing every new rule added for this version.
|
24
30
|
* Use `git diff v0.1.0..v0.2.0 docs/RULES.md | grep '## MD'` to discover
|
25
31
|
what these are.
|
26
32
|
* Search for closed issues:
|
27
33
|
* Go to <https://github.com/mivok/markdownlint/issues>
|
28
|
-
* Search for `
|
34
|
+
* Search for `closed:>1900-01-01`, changing the date to the date
|
29
35
|
of the last release.
|
30
36
|
* From this list of issues, make sections for:
|
31
|
-
*
|
32
|
-
*
|
33
|
-
*
|
34
|
-
|
35
|
-
|
36
|
-
*
|
37
|
+
* Added - for new features
|
38
|
+
* Changed - for changes in existing functionality
|
39
|
+
* Deprecated - for once-stable features removed in upcoming releases
|
40
|
+
* Removed - for deprecated features removed in this release
|
41
|
+
* Fixed - for any bug fixes
|
42
|
+
* Security - for any security issues
|
37
43
|
|
38
44
|
Next, run `rake release`. This will:
|
39
45
|
|
40
46
|
* Tag vX.Y.Z in git and push it.
|
41
47
|
* Upload the new gem to rubygems.org
|
48
|
+
|
49
|
+
Finally, add a new 'Unreleased' section to the changelog for the next release.
|
data/lib/mdl.rb
CHANGED
@@ -71,7 +71,7 @@ module MarkdownLint
|
|
71
71
|
status = 0
|
72
72
|
cli.cli_arguments.each do |filename|
|
73
73
|
puts "Checking #{filename}..." if Config[:verbose]
|
74
|
-
doc = Doc.new_from_file(filename)
|
74
|
+
doc = Doc.new_from_file(filename, Config[:ignore_front_matter])
|
75
75
|
filename = '(stdin)' if filename == "-"
|
76
76
|
if Config[:show_kramdown_warnings]
|
77
77
|
status = 2 if not doc.parsed.warnings.empty?
|
@@ -85,6 +85,7 @@ module MarkdownLint
|
|
85
85
|
next if error_lines.nil? or error_lines.empty?
|
86
86
|
status = 1
|
87
87
|
error_lines.each do |line|
|
88
|
+
line += doc.offset # Correct line numbers for any yaml front matter
|
88
89
|
if Config[:show_aliases]
|
89
90
|
puts "#{filename}:#{line}: #{rule.aliases.first || id} #{rule.description}"
|
90
91
|
else
|
data/lib/mdl/cli.rb
CHANGED
@@ -27,6 +27,12 @@ module MarkdownLint
|
|
27
27
|
:description => 'Increase verbosity',
|
28
28
|
:boolean => true
|
29
29
|
|
30
|
+
option :ignore_front_matter,
|
31
|
+
:short => '-i',
|
32
|
+
:long => '--[no-]ignore-front-matter',
|
33
|
+
:boolean => true,
|
34
|
+
:description => 'Ignore YAML front matter'
|
35
|
+
|
30
36
|
option :show_kramdown_warnings,
|
31
37
|
:short => '-w',
|
32
38
|
:long => '--[no-]warnings',
|
@@ -97,13 +103,14 @@ module MarkdownLint
|
|
97
103
|
|
98
104
|
# Load the config file if it's present
|
99
105
|
filename = CLI.probe_config_file(config[:config_file])
|
106
|
+
|
100
107
|
# Only fall back to ~/.mdlrc if we are using the default value for -c
|
101
108
|
if filename.nil? and config[:config_file] == CONFIG_FILE
|
102
109
|
filename = File.expand_path("~/#{CONFIG_FILE}")
|
103
110
|
end
|
104
111
|
|
105
112
|
if not filename.nil? and File.exist?(filename)
|
106
|
-
MarkdownLint::Config.from_file(filename)
|
113
|
+
MarkdownLint::Config.from_file(filename.to_s)
|
107
114
|
if config[:verbose]
|
108
115
|
puts "Loaded config from #{filename}"
|
109
116
|
end
|
@@ -147,15 +154,15 @@ module MarkdownLint
|
|
147
154
|
end
|
148
155
|
|
149
156
|
def self.probe_config_file(path)
|
150
|
-
|
151
|
-
|
152
|
-
return File.expand_path(path)
|
153
|
-
end
|
157
|
+
expanded_path = File.expand_path(path)
|
158
|
+
return expanded_path if File.exist?(expanded_path)
|
154
159
|
|
155
160
|
# Look for a file up from the working dir
|
156
|
-
Pathname.new(
|
161
|
+
Pathname.new(expanded_path).ascend do |p|
|
162
|
+
next unless p.directory?
|
163
|
+
|
157
164
|
config_file = p.join(CONFIG_FILE)
|
158
|
-
return config_file if File.exist?(
|
165
|
+
return config_file if File.exist?(config_file)
|
159
166
|
end
|
160
167
|
nil
|
161
168
|
end
|
data/lib/mdl/doc.rb
CHANGED
@@ -24,10 +24,23 @@ module MarkdownLint
|
|
24
24
|
|
25
25
|
attr_reader :elements
|
26
26
|
|
27
|
+
##
|
28
|
+
# The line number offset which is greater than zero when the
|
29
|
+
# markdown file contains YAML front matter that should be ignored.
|
30
|
+
|
31
|
+
attr_reader :offset
|
32
|
+
|
27
33
|
##
|
28
34
|
# Create a new document given a string containing the markdown source
|
29
35
|
|
30
|
-
def initialize(text)
|
36
|
+
def initialize(text, ignore_front_matter = false)
|
37
|
+
regex = /^---\n(.*?)---\n/m
|
38
|
+
if ignore_front_matter and regex.match(text)
|
39
|
+
@offset = regex.match(text).to_s.split("\n").length
|
40
|
+
text.sub!(regex,'')
|
41
|
+
else
|
42
|
+
@offset = 0
|
43
|
+
end
|
31
44
|
@lines = text.split("\n")
|
32
45
|
@parsed = Kramdown::Document.new(text, :input => 'MarkdownLint')
|
33
46
|
@elements = @parsed.root.children
|
@@ -37,11 +50,11 @@ module MarkdownLint
|
|
37
50
|
##
|
38
51
|
# Alternate 'constructor' passing in a filename
|
39
52
|
|
40
|
-
def self.new_from_file(filename)
|
53
|
+
def self.new_from_file(filename, ignore_front_matter = false)
|
41
54
|
if filename == "-"
|
42
|
-
self.new(STDIN.read)
|
55
|
+
self.new(STDIN.read, ignore_front_matter)
|
43
56
|
else
|
44
|
-
self.new(File.read(filename))
|
57
|
+
self.new(File.read(filename, encoding: 'UTF-8'), ignore_front_matter)
|
45
58
|
end
|
46
59
|
end
|
47
60
|
|
data/lib/mdl/rules.rb
CHANGED
@@ -15,12 +15,13 @@ rule "MD001", "Header levels should only increment by one level at a time" do
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
rule "MD002", "First header should be a
|
18
|
+
rule "MD002", "First header should be a top level header" do
|
19
19
|
tags :headers
|
20
20
|
aliases 'first-header-h1'
|
21
|
+
params :level => 1
|
21
22
|
check do |doc|
|
22
23
|
first_header = doc.find_type(:header).first
|
23
|
-
[first_header[:location]] if first_header and first_header[:level] !=
|
24
|
+
[first_header[:location]] if first_header and first_header[:level] != @params[:level]
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -164,7 +165,7 @@ rule "MD012", "Multiple consecutive blank lines" do
|
|
164
165
|
# inside of a code block are acceptable.
|
165
166
|
codeblock_lines = doc.find_type_elements(:codeblock).map{
|
166
167
|
|e| (doc.element_linenumber(e)..
|
167
|
-
doc.element_linenumber(e) + e.value.count
|
168
|
+
doc.element_linenumber(e) + e.value.lines.count).to_a }.flatten
|
168
169
|
blank_lines = doc.matching_lines(/^\s*$/)
|
169
170
|
cons_blank_lines = blank_lines.each_cons(2).select{
|
170
171
|
|p, n| n - p == 1}.map{|p, n| n}
|
@@ -180,7 +181,7 @@ rule "MD013", "Line length" do
|
|
180
181
|
# Every line in the document that is part of a code block.
|
181
182
|
codeblock_lines = doc.find_type_elements(:codeblock).map{
|
182
183
|
|e| (doc.element_linenumber(e)..
|
183
|
-
doc.element_linenumber(e) + e.value.count
|
184
|
+
doc.element_linenumber(e) + e.value.lines.count).to_a }.flatten
|
184
185
|
# Every line in the document that is part of a table.
|
185
186
|
locations = doc.elements
|
186
187
|
.map { |e| [e.options[:location], e] }
|
@@ -272,7 +273,7 @@ rule "MD022", "Headers should be surrounded by blank lines" do
|
|
272
273
|
# Kramdown requires that headers start on a block boundary, so in most
|
273
274
|
# cases it won't pick up a header without a blank line before it. We need
|
274
275
|
# to check regular text and pick out headers ourselves too
|
275
|
-
doc.find_type_elements(:p).each do |p|
|
276
|
+
doc.find_type_elements(:p, false).each do |p|
|
276
277
|
linenum = doc.element_linenumber(p)
|
277
278
|
text = p.children.select { |e| e.type == :text }.map {|e| e.value }.join
|
278
279
|
lines = text.split("\n")
|
@@ -307,7 +308,7 @@ rule "MD023", "Headers must start at the beginning of the line" do
|
|
307
308
|
end
|
308
309
|
# Next we have to look for things that aren't parsed as headers because
|
309
310
|
# they start with spaces.
|
310
|
-
doc.find_type_elements(:p).each do |p|
|
311
|
+
doc.find_type_elements(:p, false).each do |p|
|
311
312
|
linenum = doc.element_linenumber(p)
|
312
313
|
lines = doc.extract_text(p)
|
313
314
|
prev_line = ""
|
@@ -342,8 +343,9 @@ end
|
|
342
343
|
rule "MD025", "Multiple top level headers in the same document" do
|
343
344
|
tags :headers
|
344
345
|
aliases 'single-h1'
|
346
|
+
params :level => 1
|
345
347
|
check do |doc|
|
346
|
-
headers = doc.find_type(:header).select { |h| h[:level] ==
|
348
|
+
headers = doc.find_type(:header).select { |h| h[:level] == params[:level] }
|
347
349
|
if not headers.empty? and doc.element_linenumber(headers[0]) == 1
|
348
350
|
headers[1..-1].map { |h| doc.element_linenumber(h) }
|
349
351
|
end
|
@@ -599,9 +601,10 @@ end
|
|
599
601
|
rule "MD041", "First line in file should be a top level header" do
|
600
602
|
tags :headers
|
601
603
|
aliases 'first-line-h1'
|
604
|
+
params :level => 1
|
602
605
|
check do |doc|
|
603
606
|
first_header = doc.find_type(:header).first
|
604
607
|
[1] if first_header.nil? or first_header[:location] != 1 \
|
605
|
-
or first_header[:level] !=
|
608
|
+
or first_header[:level] != params[:level]
|
606
609
|
end
|
607
610
|
end
|
data/lib/mdl/version.rb
CHANGED
data/mdl.gemspec
CHANGED
@@ -20,12 +20,12 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.required_ruby_version = '>= 1.9.2'
|
22
22
|
|
23
|
-
spec.add_dependency 'kramdown', '~> 1.
|
24
|
-
spec.add_dependency 'mixlib-config', '~> 2.
|
25
|
-
spec.add_dependency 'mixlib-cli', '~> 1.
|
23
|
+
spec.add_dependency 'kramdown', '~> 1.12', '>= 1.12.0'
|
24
|
+
spec.add_dependency 'mixlib-config', '~> 2.2', '>= 2.2.1'
|
25
|
+
spec.add_dependency 'mixlib-cli', '~> 1.7', '>= 1.7.0'
|
26
26
|
|
27
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
28
|
-
spec.add_development_dependency 'rake', '~>
|
29
|
-
spec.add_development_dependency 'minitest', '~> 5.
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
28
|
+
spec.add_development_dependency 'rake', '~> 11.2'
|
29
|
+
spec.add_development_dependency 'minitest', '~> 5.9'
|
30
30
|
spec.add_development_dependency 'pry', '~> 0.10'
|
31
31
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
---
|
2
|
+
layout: post
|
3
|
+
title: Hello World!
|
4
|
+
category: Meta
|
5
|
+
tags:
|
6
|
+
- tag
|
7
|
+
- another tag
|
8
|
+
- one more tag
|
9
|
+
url: http://example.com
|
10
|
+
excerpt: Hello World! Vestibulum imperdiet adipiscing arcu, quis aliquam dolor condimentum dapibus. Aliquam fermentum leo aliquet quam volutpat et molestie mauris mattis. Suspendisse semper consequat velit in suscipit.
|
11
|
+
---
|
12
|
+
# header1
|
13
|
+
|
14
|
+
This is just a sample post.
|
15
|
+
|
16
|
+
### offending header3
|
@@ -6,4 +6,15 @@ Some text
|
|
6
6
|
===================================
|
7
7
|
|
8
8
|
Setext style title only indented {MD023}
|
9
|
-
=========================================
|
9
|
+
=========================================
|
10
|
+
|
11
|
+
* Test situations in which MD023 shouldn't be triggered.
|
12
|
+
|
13
|
+
```rb
|
14
|
+
# This shouldn't trigger MD023 as it is a code comment.
|
15
|
+
foo = "And here is some code"
|
16
|
+
```
|
17
|
+
|
18
|
+
* This is another case where MD023 shouldn't be triggered
|
19
|
+
# Test
|
20
|
+
# Test
|
@@ -9,6 +9,13 @@ Here is a short line in a code block.
|
|
9
9
|
Here is a very very very very very very very very very very very very very very very very very very very long line in a code block.
|
10
10
|
```
|
11
11
|
|
12
|
+
```text
|
13
|
+
test
|
14
|
+
test
|
15
|
+
|
16
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
|
17
|
+
```
|
18
|
+
|
12
19
|
This is a short line.
|
13
20
|
|
14
21
|
| First Header | Second Header | Third Header | Fourth Header | Fifth Header | Sixth Header |
|
data/test/test_cli.rb
CHANGED
@@ -1,51 +1,9 @@
|
|
1
1
|
require_relative 'setup_tests'
|
2
2
|
require 'open3'
|
3
3
|
require 'set'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
class TestCli < Minitest::Test
|
6
|
-
def run_cli(args, stdin = "", mdlrc="default_mdlrc")
|
7
|
-
mdl_script = File.expand_path("../../bin/mdl", __FILE__)
|
8
|
-
# Load the mdlrc file from the text/fixtures/ directory
|
9
|
-
mdlrc = File.expand_path("../fixtures/#{mdlrc}", __FILE__)
|
10
|
-
result = {}
|
11
|
-
result[:stdout], result[:stderr], result[:status] = \
|
12
|
-
Open3.capture3(*(%W{bundle exec #{mdl_script} -c #{mdlrc}} + args.split),
|
13
|
-
:stdin_data => stdin)
|
14
|
-
result[:status] = result[:status].exitstatus
|
15
|
-
result
|
16
|
-
end
|
17
|
-
|
18
|
-
def assert_rules_enabled(result, rules, only_these_rules=false)
|
19
|
-
# Asserts that the given rules are enabled given the output of mdl -l
|
20
|
-
# If only_these_rules is set, then it asserts that the given rules and no
|
21
|
-
# others are enabled.
|
22
|
-
lines = result[:stdout].split("\n")
|
23
|
-
assert_equal("Enabled rules:", lines.first)
|
24
|
-
lines.shift
|
25
|
-
rules = rules.to_set
|
26
|
-
enabled_rules = lines.map{ |l| l.split(" ").first }.to_set
|
27
|
-
if only_these_rules
|
28
|
-
assert_equal(rules, enabled_rules)
|
29
|
-
else
|
30
|
-
assert_equal(Set.new, rules - enabled_rules)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def assert_rules_disabled(result, rules)
|
35
|
-
# Asserts that the given rules are _not_ enabled given the output of mdl -l
|
36
|
-
lines = result[:stdout].split("\n")
|
37
|
-
assert_equal("Enabled rules:", lines.first)
|
38
|
-
lines.shift
|
39
|
-
rules = rules.to_set
|
40
|
-
enabled_rules = lines.map{ |l| l.split(" ").first }.to_set
|
41
|
-
assert_equal(Set.new, rules & enabled_rules)
|
42
|
-
end
|
43
|
-
|
44
|
-
def assert_ran_ok(result)
|
45
|
-
assert_equal(0, result[:status])
|
46
|
-
assert_equal("", result[:stderr])
|
47
|
-
end
|
48
|
-
|
49
7
|
def test_help_text
|
50
8
|
result = run_cli("--help")
|
51
9
|
assert_match(/Usage: \S+ \[options\]/, result[:stdout])
|
@@ -65,12 +23,20 @@ class TestCli < Minitest::Test
|
|
65
23
|
end
|
66
24
|
|
67
25
|
def test_show_alias_processing_file
|
68
|
-
result =
|
26
|
+
result = run_cli_with_input("-a -r MD002", "## header2")
|
69
27
|
assert_equal(1, result[:status])
|
70
28
|
assert_equal("", result[:stderr])
|
71
29
|
assert_match(/^\(stdin\):1: first-header-h1/, result[:stdout])
|
72
30
|
end
|
73
31
|
|
32
|
+
def test_running_on_unicode_input
|
33
|
+
result = run_cli_with_file_and_ascii_env("## header2 🚀")
|
34
|
+
assert_equal(1, result[:status])
|
35
|
+
assert_equal("", result[:stderr])
|
36
|
+
assert_match(/MD002 First header should be a top level header/,
|
37
|
+
result[:stdout])
|
38
|
+
end
|
39
|
+
|
74
40
|
def test_skipping_default_ruleset_loading
|
75
41
|
result = run_cli("-ld")
|
76
42
|
assert_rules_enabled(result, [], true)
|
@@ -94,14 +60,14 @@ class TestCli < Minitest::Test
|
|
94
60
|
|
95
61
|
def test_custom_ruleset_processing_success
|
96
62
|
my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
|
97
|
-
result =
|
63
|
+
result = run_cli_with_input("-du #{my_ruleset}", "Hello World")
|
98
64
|
assert_equal("", result[:stdout])
|
99
65
|
assert_ran_ok(result)
|
100
66
|
end
|
101
67
|
|
102
68
|
def test_custom_ruleset_processing_failure
|
103
69
|
my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
|
104
|
-
result =
|
70
|
+
result = run_cli_with_input("-du #{my_ruleset}", "Goodbye world")
|
105
71
|
assert_equal(1, result[:status])
|
106
72
|
assert_match(/^\(stdin\):1: MY001/, result[:stdout])
|
107
73
|
assert_equal("", result[:stderr])
|
@@ -111,7 +77,7 @@ class TestCli < Minitest::Test
|
|
111
77
|
# The custom rule doesn't have an alias, so the output should be identical
|
112
78
|
# to that without show_alias enabled.
|
113
79
|
my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
|
114
|
-
result =
|
80
|
+
result = run_cli_with_input("-dau #{my_ruleset}", "Goodbye world")
|
115
81
|
assert_equal(1, result[:status])
|
116
82
|
assert_match(/^\(stdin\):1: MY001/, result[:stdout])
|
117
83
|
assert_equal("", result[:stderr])
|
@@ -157,27 +123,45 @@ class TestCli < Minitest::Test
|
|
157
123
|
end
|
158
124
|
|
159
125
|
def test_rule_inclusion_config
|
160
|
-
result =
|
126
|
+
result = run_cli_with_custom_rc_file("-l", "mdlrc_enable_rules")
|
161
127
|
assert_ran_ok(result)
|
162
128
|
assert_rules_enabled(result, ["MD001", "MD002"], true)
|
163
129
|
end
|
164
130
|
|
165
131
|
def test_rule_exclusion_config
|
166
|
-
result =
|
167
|
-
|
168
|
-
|
169
|
-
|
132
|
+
result = run_cli_with_custom_rc_file("-l", "mdlrc_disable_rules")
|
133
|
+
assert_correctly_disabled(result)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_mdlrc_loading_from_current_dir_by_default
|
137
|
+
inside_tmp_dir do |dir|
|
138
|
+
with_mdlrc("mdlrc_disable_rules", dir) do
|
139
|
+
result = run_cli_without_rc_flag("-l")
|
140
|
+
assert_correctly_disabled(result)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_mdlrc_loading_ascends_until_it_finds_an_rc_file
|
146
|
+
Dir.mktmpdir do |parent_dir|
|
147
|
+
inside_tmp_dir(parent_dir) do
|
148
|
+
with_mdlrc("mdlrc_disable_rules", parent_dir) do
|
149
|
+
result = run_cli_without_rc_flag("-l")
|
150
|
+
assert_correctly_disabled(result)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
170
154
|
end
|
171
155
|
|
172
156
|
def test_tag_inclusion_config
|
173
|
-
result =
|
157
|
+
result = run_cli_with_custom_rc_file("-l", "mdlrc_enable_tags")
|
174
158
|
assert_ran_ok(result)
|
175
159
|
assert_rules_enabled(result, ["MD001", "MD002", "MD009", "MD010"])
|
176
160
|
assert_rules_disabled(result, ["MD004", "MD005"])
|
177
161
|
end
|
178
162
|
|
179
163
|
def test_tag_exclusion_config
|
180
|
-
result =
|
164
|
+
result = run_cli_with_custom_rc_file("-l", "mdlrc_disable_tags")
|
181
165
|
assert_ran_ok(result)
|
182
166
|
assert_rules_enabled(result, ["MD004", "MD030", "MD032"])
|
183
167
|
assert_rules_disabled(result, ["MD001", "MD005"])
|
@@ -202,4 +186,108 @@ class TestCli < Minitest::Test
|
|
202
186
|
files_with_issues = result[:stdout].split("\n").map { |l| l.split(":")[0] }.sort
|
203
187
|
assert_equal(files_with_issues, ["#{path}/bar.markdown", "#{path}/foo.md"])
|
204
188
|
end
|
189
|
+
|
190
|
+
def test_ignore_front_matter
|
191
|
+
path = File.expand_path("./fixtures/front_matter", File.dirname(__FILE__))
|
192
|
+
result = run_cli("-i -r MD001,MD041,MD034 #{path}")
|
193
|
+
assert_equal(result[:stdout], "#{path}/jekyll_post.md:16: MD001 Header levels should only increment by one level at a time\n")
|
194
|
+
end
|
195
|
+
|
196
|
+
private
|
197
|
+
|
198
|
+
def run_cli_with_input(args, stdin)
|
199
|
+
run_cmd("#{mdl_script} -c #{default_rc_file} #{args}", stdin)
|
200
|
+
end
|
201
|
+
|
202
|
+
def run_cli_without_rc_flag(args)
|
203
|
+
run_cmd("#{mdl_script} #{args}", "")
|
204
|
+
end
|
205
|
+
|
206
|
+
def run_cli(args)
|
207
|
+
run_cmd("#{mdl_script} -c #{default_rc_file} #{args}", "")
|
208
|
+
end
|
209
|
+
|
210
|
+
def run_cli_with_custom_rc_file(args, filename)
|
211
|
+
run_cmd("#{mdl_script} -c #{fixture_rc(filename)} #{args}", "")
|
212
|
+
end
|
213
|
+
|
214
|
+
def run_cli_with_file_and_ascii_env(content)
|
215
|
+
Tempfile.create('foo') do |f|
|
216
|
+
f.write(content)
|
217
|
+
f.close
|
218
|
+
|
219
|
+
run_cmd("ruby -E ASCII #{mdl_script} -c #{default_rc_file} #{f.path}", "")
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def run_cmd(command, stdin)
|
224
|
+
result = {}
|
225
|
+
result[:stdout], result[:stderr], result[:status] = \
|
226
|
+
Open3.capture3("bundle", "exec", *command.split, :stdin_data => stdin)
|
227
|
+
result[:status] = result[:status].exitstatus
|
228
|
+
result
|
229
|
+
end
|
230
|
+
|
231
|
+
def mdl_script
|
232
|
+
File.expand_path("../../bin/mdl", __FILE__)
|
233
|
+
end
|
234
|
+
|
235
|
+
def fixture_rc(filename)
|
236
|
+
File.expand_path("../fixtures/#{filename}", __FILE__)
|
237
|
+
end
|
238
|
+
|
239
|
+
def default_rc_file
|
240
|
+
fixture_rc("default_mdlrc")
|
241
|
+
end
|
242
|
+
|
243
|
+
def inside_tmp_dir(base_dir = Dir.tmpdir)
|
244
|
+
Dir.mktmpdir(nil, base_dir) do |dir|
|
245
|
+
Dir.chdir(dir) { yield(dir) }
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def assert_rules_enabled(result, rules, only_these_rules=false)
|
250
|
+
# Asserts that the given rules are enabled given the output of mdl -l
|
251
|
+
# If only_these_rules is set, then it asserts that the given rules and no
|
252
|
+
# others are enabled.
|
253
|
+
lines = result[:stdout].split("\n")
|
254
|
+
assert_equal("Enabled rules:", lines.first)
|
255
|
+
lines.shift
|
256
|
+
rules = rules.to_set
|
257
|
+
enabled_rules = lines.map{ |l| l.split(" ").first }.to_set
|
258
|
+
if only_these_rules
|
259
|
+
assert_equal(rules, enabled_rules)
|
260
|
+
else
|
261
|
+
assert_equal(Set.new, rules - enabled_rules)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def assert_rules_disabled(result, rules)
|
266
|
+
# Asserts that the given rules are _not_ enabled given the output of mdl -l
|
267
|
+
lines = result[:stdout].split("\n")
|
268
|
+
assert_equal("Enabled rules:", lines.first)
|
269
|
+
lines.shift
|
270
|
+
rules = rules.to_set
|
271
|
+
enabled_rules = lines.map{ |l| l.split(" ").first }.to_set
|
272
|
+
assert_equal(Set.new, rules & enabled_rules)
|
273
|
+
end
|
274
|
+
|
275
|
+
def assert_ran_ok(result)
|
276
|
+
assert_equal(0, result[:status])
|
277
|
+
assert_equal("", result[:stderr])
|
278
|
+
end
|
279
|
+
|
280
|
+
def assert_correctly_disabled(result)
|
281
|
+
assert_ran_ok(result)
|
282
|
+
assert_rules_disabled(result, ["MD001", "MD002"])
|
283
|
+
assert_rules_enabled(result, ["MD003", "MD004"])
|
284
|
+
end
|
285
|
+
|
286
|
+
def with_mdlrc(filename, dest_dir = Dir.pwd)
|
287
|
+
rc_path = File.join(dest_dir, ".mdlrc")
|
288
|
+
FileUtils.cp(fixture_rc(filename), rc_path)
|
289
|
+
yield
|
290
|
+
ensure
|
291
|
+
File.delete(rc_path)
|
292
|
+
end
|
205
293
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Harrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kramdown
|
@@ -16,102 +16,102 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.12'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
22
|
+
version: 1.12.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '1.
|
29
|
+
version: '1.12'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.
|
32
|
+
version: 1.12.0
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: mixlib-config
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '2.
|
39
|
+
version: '2.2'
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 2.1
|
42
|
+
version: 2.2.1
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '2.
|
49
|
+
version: '2.2'
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 2.1
|
52
|
+
version: 2.2.1
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: mixlib-cli
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: '1.
|
59
|
+
version: '1.7'
|
60
60
|
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.
|
62
|
+
version: 1.7.0
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '1.
|
69
|
+
version: '1.7'
|
70
70
|
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: 1.
|
72
|
+
version: 1.7.0
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: bundler
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
77
|
- - "~>"
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: '1.
|
79
|
+
version: '1.12'
|
80
80
|
type: :development
|
81
81
|
prerelease: false
|
82
82
|
version_requirements: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
84
|
- - "~>"
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: '1.
|
86
|
+
version: '1.12'
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: rake
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
90
90
|
requirements:
|
91
91
|
- - "~>"
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
93
|
+
version: '11.2'
|
94
94
|
type: :development
|
95
95
|
prerelease: false
|
96
96
|
version_requirements: !ruby/object:Gem::Requirement
|
97
97
|
requirements:
|
98
98
|
- - "~>"
|
99
99
|
- !ruby/object:Gem::Version
|
100
|
-
version: '
|
100
|
+
version: '11.2'
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
102
|
name: minitest
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
105
|
- - "~>"
|
106
106
|
- !ruby/object:Gem::Version
|
107
|
-
version: '5.
|
107
|
+
version: '5.9'
|
108
108
|
type: :development
|
109
109
|
prerelease: false
|
110
110
|
version_requirements: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
112
|
- - "~>"
|
113
113
|
- !ruby/object:Gem::Version
|
114
|
-
version: '5.
|
114
|
+
version: '5.9'
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: pry
|
117
117
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,11 +165,14 @@ files:
|
|
165
165
|
- test/fixtures/default_mdlrc
|
166
166
|
- test/fixtures/dir_with_md_and_markdown/bar.markdown
|
167
167
|
- test/fixtures/dir_with_md_and_markdown/foo.md
|
168
|
+
- test/fixtures/front_matter/jekyll_post.md
|
168
169
|
- test/fixtures/mdlrc_disable_rules
|
169
170
|
- test/fixtures/mdlrc_disable_tags
|
170
171
|
- test/fixtures/mdlrc_enable_rules
|
171
172
|
- test/fixtures/mdlrc_enable_tags
|
172
173
|
- test/fixtures/my_ruleset.rb
|
174
|
+
- test/rule_tests/alternate_top_level_header.md
|
175
|
+
- test/rule_tests/alternate_top_level_header_style.rb
|
173
176
|
- test/rule_tests/atx_closed_header_spacing.md
|
174
177
|
- test/rule_tests/atx_header_spacing.md
|
175
178
|
- test/rule_tests/blockquote_blank_lines.md
|
@@ -289,7 +292,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
289
292
|
version: '0'
|
290
293
|
requirements: []
|
291
294
|
rubyforge_project:
|
292
|
-
rubygems_version: 2.5.
|
295
|
+
rubygems_version: 2.5.1
|
293
296
|
signing_key:
|
294
297
|
specification_version: 4
|
295
298
|
summary: Markdown lint tool
|
@@ -297,11 +300,14 @@ test_files:
|
|
297
300
|
- test/fixtures/default_mdlrc
|
298
301
|
- test/fixtures/dir_with_md_and_markdown/bar.markdown
|
299
302
|
- test/fixtures/dir_with_md_and_markdown/foo.md
|
303
|
+
- test/fixtures/front_matter/jekyll_post.md
|
300
304
|
- test/fixtures/mdlrc_disable_rules
|
301
305
|
- test/fixtures/mdlrc_disable_tags
|
302
306
|
- test/fixtures/mdlrc_enable_rules
|
303
307
|
- test/fixtures/mdlrc_enable_tags
|
304
308
|
- test/fixtures/my_ruleset.rb
|
309
|
+
- test/rule_tests/alternate_top_level_header.md
|
310
|
+
- test/rule_tests/alternate_top_level_header_style.rb
|
305
311
|
- test/rule_tests/atx_closed_header_spacing.md
|
306
312
|
- test/rule_tests/atx_header_spacing.md
|
307
313
|
- test/rule_tests/blockquote_blank_lines.md
|
@@ -398,4 +404,3 @@ test_files:
|
|
398
404
|
- test/test_cli.rb
|
399
405
|
- test/test_ruledocs.rb
|
400
406
|
- test/test_rules.rb
|
401
|
-
has_rdoc:
|