mdl 0.7.0 → 0.8.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.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mdl/doc.rb +1 -1
  3. data/lib/mdl/version.rb +1 -1
  4. data/mdl.gemspec +3 -3
  5. metadata +4 -266
  6. data/.github/ISSUE_TEMPLATE/BUG_TEMPLATE.md +0 -22
  7. data/.github/ISSUE_TEMPLATE/DESIGN_PROPOSAL.md +0 -40
  8. data/.github/ISSUE_TEMPLATE/ENHANCEMENT_REQUEST.md +0 -20
  9. data/.github/ISSUE_TEMPLATE/RULE_REQUEST.md +0 -20
  10. data/.github/PULL_REQUEST_TEMPLATE.md +0 -23
  11. data/.gitignore +0 -13
  12. data/.pre-commit-hooks.yaml +0 -6
  13. data/.travis.yml +0 -12
  14. data/CHANGELOG.md +0 -218
  15. data/CONTRIBUTING.md +0 -76
  16. data/MAINTAINERS.md +0 -21
  17. data/README.md +0 -87
  18. data/Rakefile +0 -8
  19. data/docs/RULES.md +0 -1089
  20. data/docs/configuration.md +0 -99
  21. data/docs/creating_rules.md +0 -90
  22. data/docs/creating_styles.md +0 -47
  23. data/docs/rolling_a_release.md +0 -51
  24. data/example/markdown_spec.md +0 -897
  25. data/test/fixtures/default_mdlrc +0 -1
  26. data/test/fixtures/dir_with_md_and_markdown/bar.markdown +0 -1
  27. data/test/fixtures/dir_with_md_and_markdown/foo.md +0 -1
  28. data/test/fixtures/front_matter/jekyll_post.md +0 -16
  29. data/test/fixtures/front_matter/jekyll_post_2.md +0 -17
  30. data/test/fixtures/mdlrc_disable_rules +0 -1
  31. data/test/fixtures/mdlrc_disable_tags +0 -1
  32. data/test/fixtures/mdlrc_enable_rules +0 -1
  33. data/test/fixtures/mdlrc_enable_tags +0 -1
  34. data/test/fixtures/my_ruleset.rb +0 -6
  35. data/test/rule_tests/alternate_top_level_header.md +0 -3
  36. data/test/rule_tests/alternate_top_level_header_style.rb +0 -4
  37. data/test/rule_tests/atx_closed_header_spacing.md +0 -17
  38. data/test/rule_tests/atx_header_spacing.md +0 -5
  39. data/test/rule_tests/blockquote_blank_lines.md +0 -31
  40. data/test/rule_tests/blockquote_spaces.md +0 -23
  41. data/test/rule_tests/bulleted_list_2_space_indent.md +0 -6
  42. data/test/rule_tests/bulleted_list_2_space_indent_style.rb +0 -3
  43. data/test/rule_tests/bulleted_list_4_space_indent.md +0 -3
  44. data/test/rule_tests/bulleted_list_not_at_beginning_of_line.md +0 -14
  45. data/test/rule_tests/code_block_consistency.md +0 -11
  46. data/test/rule_tests/code_block_consistency_style.rb +0 -1
  47. data/test/rule_tests/code_block_dollar.md +0 -33
  48. data/test/rule_tests/code_block_dollar_fence.md +0 -29
  49. data/test/rule_tests/code_block_fenced.md +0 -17
  50. data/test/rule_tests/code_block_fenced_style.rb +0 -1
  51. data/test/rule_tests/code_block_indented.md +0 -17
  52. data/test/rule_tests/code_block_indented_style.rb +0 -1
  53. data/test/rule_tests/consecutive_blank_lines.md +0 -11
  54. data/test/rule_tests/consistent_bullet_styles_asterisk.md +0 -3
  55. data/test/rule_tests/consistent_bullet_styles_dash.md +0 -3
  56. data/test/rule_tests/consistent_bullet_styles_plus.md +0 -3
  57. data/test/rule_tests/default_test_style.rb +0 -5
  58. data/test/rule_tests/emphasis_instead_of_headers.md +0 -42
  59. data/test/rule_tests/empty_doc.md +0 -0
  60. data/test/rule_tests/fenced_code_blocks.md +0 -27
  61. data/test/rule_tests/fenced_code_with_nesting.md +0 -73
  62. data/test/rule_tests/fenced_code_without_blank_lines.md +0 -42
  63. data/test/rule_tests/fenced_code_without_blank_lines_style.rb +0 -3
  64. data/test/rule_tests/first_header_bad_atx.md +0 -1
  65. data/test/rule_tests/first_header_bad_setext.md +0 -2
  66. data/test/rule_tests/first_header_good_atx.md +0 -1
  67. data/test/rule_tests/first_header_good_setext.md +0 -2
  68. data/test/rule_tests/first_line_top_level_header_atx.md +0 -3
  69. data/test/rule_tests/first_line_top_level_header_atx_style.rb +0 -2
  70. data/test/rule_tests/first_line_top_level_header_setext.md +0 -4
  71. data/test/rule_tests/first_line_top_level_header_setext_style.rb +0 -2
  72. data/test/rule_tests/fix_102_extra_nodes_in_link_text.md +0 -8
  73. data/test/rule_tests/header_duplicate_content.md +0 -11
  74. data/test/rule_tests/header_duplicate_content_different_nesting.md +0 -11
  75. data/test/rule_tests/header_duplicate_content_different_nesting_style.rb +0 -1
  76. data/test/rule_tests/header_duplicate_content_no_different_nesting.md +0 -13
  77. data/test/rule_tests/header_multiple_toplevel.md +0 -3
  78. data/test/rule_tests/header_mutliple_h1_no_toplevel.md +0 -5
  79. data/test/rule_tests/header_trailing_punctuation.md +0 -11
  80. data/test/rule_tests/header_trailing_punctuation_customized.md +0 -14
  81. data/test/rule_tests/header_trailing_punctuation_customized_style.rb +0 -2
  82. data/test/rule_tests/headers_bad.md +0 -7
  83. data/test/rule_tests/headers_good.md +0 -5
  84. data/test/rule_tests/headers_good_setext_with_atx.md +0 -7
  85. data/test/rule_tests/headers_good_setext_with_atx_style.rb +0 -2
  86. data/test/rule_tests/headers_good_with_issue_numbers.md +0 -12
  87. data/test/rule_tests/headers_surrounding_space_atx.md +0 -12
  88. data/test/rule_tests/headers_surrounding_space_setext.md +0 -15
  89. data/test/rule_tests/headers_with_spaces_at_the_beginning.md +0 -20
  90. data/test/rule_tests/hr_style_dashes.md +0 -22
  91. data/test/rule_tests/hr_style_dashes_style.rb +0 -3
  92. data/test/rule_tests/hr_style_inconsistent.md +0 -22
  93. data/test/rule_tests/hr_style_long.md +0 -22
  94. data/test/rule_tests/hr_style_long_style.rb +0 -3
  95. data/test/rule_tests/hr_style_stars.md +0 -22
  96. data/test/rule_tests/hr_style_stars_style.rb +0 -3
  97. data/test/rule_tests/inconsistent_bullet_indent_same_level.md +0 -4
  98. data/test/rule_tests/inconsistent_bullet_styles_asterisk.md +0 -3
  99. data/test/rule_tests/inconsistent_bullet_styles_dash.md +0 -3
  100. data/test/rule_tests/inconsistent_bullet_styles_plus.md +0 -3
  101. data/test/rule_tests/incorrect_bullet_style_asterisk.md +0 -3
  102. data/test/rule_tests/incorrect_bullet_style_asterisk_style.rb +0 -3
  103. data/test/rule_tests/incorrect_bullet_style_dash.md +0 -3
  104. data/test/rule_tests/incorrect_bullet_style_dash_style.rb +0 -3
  105. data/test/rule_tests/incorrect_bullet_style_plus.md +0 -3
  106. data/test/rule_tests/incorrect_bullet_style_plus_style.rb +0 -3
  107. data/test/rule_tests/incorrect_header_atx.md +0 -6
  108. data/test/rule_tests/incorrect_header_atx_closed.md +0 -6
  109. data/test/rule_tests/incorrect_header_atx_closed_style.rb +0 -2
  110. data/test/rule_tests/incorrect_header_atx_style.rb +0 -2
  111. data/test/rule_tests/incorrect_header_setext.md +0 -6
  112. data/test/rule_tests/incorrect_header_setext_style.rb +0 -2
  113. data/test/rule_tests/inline_html.md +0 -13
  114. data/test/rule_tests/links.md +0 -9
  115. data/test/rule_tests/lists_without_blank_lines.md +0 -75
  116. data/test/rule_tests/long_lines.md +0 -3
  117. data/test/rule_tests/long_lines_100.md +0 -7
  118. data/test/rule_tests/long_lines_100_style.rb +0 -3
  119. data/test/rule_tests/long_lines_code.md +0 -45
  120. data/test/rule_tests/long_lines_code_style.rb +0 -3
  121. data/test/rule_tests/mixed_header_types_atx.md +0 -6
  122. data/test/rule_tests/mixed_header_types_atx_closed.md +0 -6
  123. data/test/rule_tests/mixed_header_types_setext.md +0 -6
  124. data/test/rule_tests/no_first_line_header.md +0 -1
  125. data/test/rule_tests/no_first_line_header_style.rb +0 -1
  126. data/test/rule_tests/no_first_line_top_level_header.md +0 -1
  127. data/test/rule_tests/no_first_line_top_level_header_style.rb +0 -1
  128. data/test/rule_tests/ordered_list_item_prefix.md +0 -13
  129. data/test/rule_tests/ordered_list_item_prefix_ordered.md +0 -13
  130. data/test/rule_tests/ordered_list_item_prefix_ordered_style.rb +0 -3
  131. data/test/rule_tests/reversed_link.md +0 -7
  132. data/test/rule_tests/spaces_after_list_marker.md +0 -74
  133. data/test/rule_tests/spaces_after_list_marker_style.rb +0 -5
  134. data/test/rule_tests/spaces_inside_codespan_elements.md +0 -7
  135. data/test/rule_tests/spaces_inside_emphasis_markers.md +0 -35
  136. data/test/rule_tests/spaces_inside_link_text.md +0 -28
  137. data/test/rule_tests/trailing_spaces_br.md +0 -4
  138. data/test/rule_tests/trailing_spaces_br_style.rb +0 -3
  139. data/test/rule_tests/whitespace_issues.md +0 -3
  140. data/test/setup_tests.rb +0 -5
  141. data/test/test_cli.rb +0 -301
  142. data/test/test_ruledocs.rb +0 -52
  143. data/test/test_rules.rb +0 -58
  144. data/tools/README.md +0 -3
  145. data/tools/docker/Dockerfile +0 -13
  146. data/tools/docker/README.md +0 -19
  147. data/tools/test_location.rb +0 -20
  148. data/tools/view_markdown.rb +0 -11
@@ -1,301 +0,0 @@
1
- require_relative 'setup_tests'
2
- require 'open3'
3
- require 'set'
4
- require 'fileutils'
5
-
6
- class TestCli < Minitest::Test
7
- def test_help_text
8
- result = run_cli("--help")
9
- assert_match(/Usage: \S+ \[options\]/, result[:stdout])
10
- assert_equal(0, result[:status])
11
- end
12
-
13
- def test_default_ruleset_loading
14
- result = run_cli("-l")
15
- assert_ran_ok(result)
16
- assert_rules_enabled(result, ["MD001"])
17
- end
18
-
19
- def test_show_alias_rule_list
20
- result = run_cli("-al")
21
- assert_ran_ok(result)
22
- assert_rules_enabled(result, ["header-increment"])
23
- end
24
-
25
- def test_show_alias_processing_file
26
- result = run_cli_with_input("-a -r MD002", "## header2")
27
- assert_equal(1, result[:status])
28
- assert_equal("", result[:stderr])
29
- assert_match(/^\(stdin\):1: first-header-h1/, result[:stdout])
30
- end
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
-
40
- def test_skipping_default_ruleset_loading
41
- result = run_cli("-ld")
42
- assert_rules_enabled(result, [], true)
43
- end
44
-
45
- def test_custom_ruleset_loading
46
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
47
- result = run_cli("-ldu #{my_ruleset}")
48
- assert_rules_enabled(result, ["MY001"], true)
49
- assert_ran_ok(result)
50
- end
51
-
52
- def test_show_alias_rule_without_alias
53
- # Tests that when -a is given, but the rule doesn't have an alias, it
54
- # prints the rule ID instead.
55
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
56
- result = run_cli("-ladu #{my_ruleset}")
57
- assert_rules_enabled(result, ["MY001"], true)
58
- assert_ran_ok(result)
59
- end
60
-
61
- def test_custom_ruleset_processing_success
62
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
63
- result = run_cli_with_input("-du #{my_ruleset}", "Hello World")
64
- assert_equal("", result[:stdout])
65
- assert_ran_ok(result)
66
- end
67
-
68
- def test_custom_ruleset_processing_failure
69
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
70
- result = run_cli_with_input("-du #{my_ruleset}", "Goodbye world")
71
- assert_equal(1, result[:status])
72
- assert_match(/^\(stdin\):1: MY001/, result[:stdout])
73
- assert_equal("", result[:stderr])
74
- end
75
-
76
- def test_custom_ruleset_processing_failure_with_show_alias
77
- # The custom rule doesn't have an alias, so the output should be identical
78
- # to that without show_alias enabled.
79
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
80
- result = run_cli_with_input("-dau #{my_ruleset}", "Goodbye world")
81
- assert_equal(1, result[:status])
82
- assert_match(/^\(stdin\):1: MY001/, result[:stdout])
83
- assert_equal("", result[:stderr])
84
- end
85
-
86
- def test_custom_ruleset_loading_with_default
87
- my_ruleset = File.expand_path("../fixtures/my_ruleset.rb", __FILE__)
88
- result = run_cli("-lu #{my_ruleset}")
89
- assert_rules_enabled(result, ["MD001", "MY001"])
90
- assert_ran_ok(result)
91
- end
92
-
93
- def test_rule_inclusion_cli
94
- result = run_cli("-r MD001 -l")
95
- assert_rules_enabled(result, ["MD001"], true)
96
- assert_ran_ok(result)
97
- end
98
-
99
- def test_rule_exclusion_cli
100
- result = run_cli("-r ~MD001 -l")
101
- assert_rules_disabled(result, ["MD001"])
102
- assert_ran_ok(result)
103
- end
104
-
105
- def test_rule_inclusion_with_exclusion_cli
106
- result = run_cli("-r ~MD001,MD039 -l")
107
- assert_rules_enabled(result, ["MD039"], true)
108
- assert_ran_ok(result)
109
- end
110
-
111
- def test_tag_inclusion_cli
112
- result = run_cli("-t headers -l")
113
- assert_rules_enabled(result, ["MD001", "MD002", "MD003"])
114
- assert_rules_disabled(result, ["MD004", "MD005", "MD006"])
115
- assert_ran_ok(result)
116
- end
117
-
118
- def test_tag_exclusion_cli
119
- result = run_cli("-t ~headers -l")
120
- assert_ran_ok(result)
121
- assert_rules_disabled(result, ["MD001", "MD002", "MD003"])
122
- assert_rules_enabled(result, ["MD004", "MD005", "MD006"])
123
- end
124
-
125
- def test_rule_inclusion_config
126
- result = run_cli_with_custom_rc_file("-l", "mdlrc_enable_rules")
127
- assert_ran_ok(result)
128
- assert_rules_enabled(result, ["MD001", "MD002"], true)
129
- end
130
-
131
- def test_rule_exclusion_config
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
154
- end
155
-
156
- def test_tag_inclusion_config
157
- result = run_cli_with_custom_rc_file("-l", "mdlrc_enable_tags")
158
- assert_ran_ok(result)
159
- assert_rules_enabled(result, ["MD001", "MD002", "MD009", "MD010"])
160
- assert_rules_disabled(result, ["MD004", "MD005"])
161
- end
162
-
163
- def test_tag_exclusion_config
164
- result = run_cli_with_custom_rc_file("-l", "mdlrc_disable_tags")
165
- assert_ran_ok(result)
166
- assert_rules_enabled(result, ["MD004", "MD030", "MD032"])
167
- assert_rules_disabled(result, ["MD001", "MD005"])
168
- end
169
-
170
- def test_rule_inclusion_alias_cli
171
- result = run_cli("-l -r header-increment")
172
- assert_ran_ok(result)
173
- assert_rules_enabled(result, ["MD001"], true)
174
- end
175
-
176
- def test_rule_exclusion_alias_cli
177
- result = run_cli("-l -r ~header-increment")
178
- assert_ran_ok(result)
179
- assert_rules_disabled(result, ["MD001"])
180
- assert_rules_enabled(result, ["MD002"])
181
- end
182
-
183
- def test_directory_scanning
184
- path = File.expand_path("./fixtures/dir_with_md_and_markdown", File.dirname(__FILE__))
185
- result = run_cli("#{path}")
186
- lines_output = result[:stdout].lines
187
- interested_lines = lines_output[0..(lines_output.count - 3)]
188
- files_with_issues = interested_lines.map { |l| l.split(":")[0] }.sort
189
- assert_equal(files_with_issues, ["#{path}/bar.markdown", "#{path}/foo.md"])
190
- end
191
-
192
- def test_ignore_front_matter
193
- path = File.expand_path("./fixtures/front_matter", File.dirname(__FILE__))
194
- result = run_cli("-i -r MD001,MD041,MD034 #{path}")
195
-
196
- expected = \
197
- "#{path}/jekyll_post.md:16: MD001 Header levels should only increment by one level at a time\n"\
198
- "#{path}/jekyll_post_2.md:16: MD001 Header levels should only increment by one level at a time\n"\
199
- "\nA detailed description of the rules is available at https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md\n"
200
-
201
- assert_equal(result[:stdout], expected)
202
- end
203
-
204
- private
205
-
206
- def run_cli_with_input(args, stdin)
207
- run_cmd("#{mdl_script} -c #{default_rc_file} #{args}", stdin)
208
- end
209
-
210
- def run_cli_without_rc_flag(args)
211
- run_cmd("#{mdl_script} #{args}", "")
212
- end
213
-
214
- def run_cli(args)
215
- run_cmd("#{mdl_script} -c #{default_rc_file} #{args}", "")
216
- end
217
-
218
- def run_cli_with_custom_rc_file(args, filename)
219
- run_cmd("#{mdl_script} -c #{fixture_rc(filename)} #{args}", "")
220
- end
221
-
222
- def run_cli_with_file_and_ascii_env(content)
223
- Tempfile.create('foo') do |f|
224
- f.write(content)
225
- f.close
226
-
227
- run_cmd("ruby -E ASCII #{mdl_script} -c #{default_rc_file} #{f.path}", "")
228
- end
229
- end
230
-
231
- def run_cmd(command, stdin)
232
- result = {}
233
- result[:stdout], result[:stderr], result[:status] = \
234
- Open3.capture3("bundle", "exec", *command.split, :stdin_data => stdin)
235
- result[:status] = result[:status].exitstatus
236
- result
237
- end
238
-
239
- def mdl_script
240
- File.expand_path("../../bin/mdl", __FILE__)
241
- end
242
-
243
- def fixture_rc(filename)
244
- File.expand_path("../fixtures/#{filename}", __FILE__)
245
- end
246
-
247
- def default_rc_file
248
- fixture_rc("default_mdlrc")
249
- end
250
-
251
- def inside_tmp_dir(base_dir = Dir.tmpdir)
252
- Dir.mktmpdir(nil, base_dir) do |dir|
253
- Dir.chdir(dir) { yield(dir) }
254
- end
255
- end
256
-
257
- def assert_rules_enabled(result, rules, only_these_rules=false)
258
- # Asserts that the given rules are enabled given the output of mdl -l
259
- # If only_these_rules is set, then it asserts that the given rules and no
260
- # others are enabled.
261
- lines = result[:stdout].split("\n")
262
- assert_equal("Enabled rules:", lines.first)
263
- lines.shift
264
- rules = rules.to_set
265
- enabled_rules = lines.map{ |l| l.split(" ").first }.to_set
266
- if only_these_rules
267
- assert_equal(rules, enabled_rules)
268
- else
269
- assert_equal(Set.new, rules - enabled_rules)
270
- end
271
- end
272
-
273
- def assert_rules_disabled(result, rules)
274
- # Asserts that the given rules are _not_ enabled given the output of mdl -l
275
- lines = result[:stdout].split("\n")
276
- assert_equal("Enabled rules:", lines.first)
277
- lines.shift
278
- rules = rules.to_set
279
- enabled_rules = lines.map{ |l| l.split(" ").first }.to_set
280
- assert_equal(Set.new, rules & enabled_rules)
281
- end
282
-
283
- def assert_ran_ok(result)
284
- assert_equal(0, result[:status])
285
- assert_equal("", result[:stderr])
286
- end
287
-
288
- def assert_correctly_disabled(result)
289
- assert_ran_ok(result)
290
- assert_rules_disabled(result, ["MD001", "MD002"])
291
- assert_rules_enabled(result, ["MD003", "MD004"])
292
- end
293
-
294
- def with_mdlrc(filename, dest_dir = Dir.pwd)
295
- rc_path = File.join(dest_dir, ".mdlrc")
296
- FileUtils.cp(fixture_rc(filename), rc_path)
297
- yield
298
- ensure
299
- File.delete(rc_path)
300
- end
301
- end
@@ -1,52 +0,0 @@
1
- require_relative 'setup_tests'
2
-
3
- # Ensures there is documentation for every rule, and that the
4
- # descriptions/tags/etc in the rule match those in the documentation
5
- class TestRuledocs < Minitest::Test
6
- @@ruleset = MarkdownLint::RuleSet.new
7
- @@ruleset.load_default
8
- @@rules = @@ruleset.rules
9
-
10
- def setup
11
- @ruledocs = load_ruledocs
12
- end
13
-
14
- def load_ruledocs
15
- rules = Hash.new({}) # Default to {} if no docs for the rule
16
- curr_rule = nil
17
- rules_file = File.expand_path('../../docs/RULES.md', __FILE__)
18
- File.read(rules_file).split("\n").each do |l|
19
- if l.match(/^## (MD\d+) - (.*)$/)
20
- rules[$1] = { :description => $2, :params => {} }
21
- curr_rule = $1
22
- elsif l.match(/^Tags: (.*)$/)
23
- rules[curr_rule][:tags] = $1.split(',').map{|i| i.strip.to_sym}
24
- elsif l.match(/^Aliases: (.*)$/)
25
- rules[curr_rule][:aliases] = $1.split(',').map{|i| i.strip}
26
- elsif l.match(/^Parameters: (.*)(\(.*\)?)$/)
27
- rules[curr_rule][:params] = $1.split(',').map{|i| i.strip.to_sym}
28
- end
29
- end
30
- rules
31
- end
32
-
33
- @@rules.each do |id, r|
34
- define_method("test_ruledoc_description_#{id}") do
35
- assert_equal r.description, @ruledocs[id][:description]
36
- end
37
- define_method("test_ruledoc_tags_#{id}") do
38
- assert_equal r.tags, @ruledocs[id][:tags]
39
- end
40
- define_method("test_ruledoc_aliases_#{id}") do
41
- assert_equal r.aliases, @ruledocs[id][:aliases]
42
- end
43
- define_method("test_ruledoc_params_#{id}") do
44
- assert_equal r.params.keys.sort, (@ruledocs[id][:params] || []).sort
45
- end
46
- end
47
-
48
- def test_ruledoc_for_every_rule
49
- # (and vice versa)
50
- assert_equal @@rules.keys, @ruledocs.keys
51
- end
52
- end
@@ -1,58 +0,0 @@
1
- require_relative 'setup_tests'
2
-
3
- class TestRules < Minitest::Test
4
-
5
- def get_expected_errors(lines)
6
- # Looks for lines tagged with {MD123} to signify that a rule is expected to
7
- # fire for this line. It also looks for lines tagged with {MD123:1} to
8
- # signify that a rule is expected to fire on another line (the line number
9
- # after the colon).
10
- expected_errors = {}
11
- re = /\{(MD\d+)(?::(\d+))?\}/
12
- lines.each_with_index do |line, num|
13
- m = re.match(line)
14
- while m
15
- expected_errors[m[1]] ||= []
16
- if m[2]
17
- expected_line = m[2].to_i
18
- else
19
- expected_line = num + 1 # 1 indexed lines
20
- end
21
- expected_errors[m[1]] << expected_line
22
- m = re.match(line, m.end(0))
23
- end
24
- end
25
- expected_errors
26
- end
27
-
28
- def do_lint(filename)
29
- # Check for a test_case_style.rb style file for individual tests
30
- style_file = filename.sub(/.md$/, '_style.rb')
31
- if ! File.exist?(style_file)
32
- style_file = "#{File.dirname(filename)}/default_test_style.rb"
33
- end
34
-
35
- ruleset = MarkdownLint::RuleSet.new
36
- ruleset.load_default
37
- rules = ruleset.rules
38
- style = MarkdownLint::Style.load(style_file, rules)
39
- rules.select! {|r| style.rules.include?(r)}
40
-
41
- doc = MarkdownLint::Doc.new(File.read(filename))
42
- expected_errors = get_expected_errors(doc.lines)
43
- actual_errors = {}
44
- rules.sort.each do |id, rule|
45
- error_lines = rule.check.call(doc)
46
- if error_lines and not error_lines.empty?
47
- actual_errors[id] = error_lines
48
- end
49
- end
50
- assert_equal expected_errors, actual_errors
51
- end
52
-
53
- Dir[File.expand_path("../rule_tests/*.md", __FILE__)].each do |filename|
54
- define_method("test_#{File.basename(filename, '.md')}") do
55
- do_lint(filename)
56
- end
57
- end
58
- end
@@ -1,3 +0,0 @@
1
- This directory contains a few scripts that, while not part of markdownlint
2
- directly, can be useful for inspecting markdown documents and debugging
3
- issues.
@@ -1,13 +0,0 @@
1
- FROM alpine:3.4
2
-
3
- MAINTAINER Mark Harrison <mark@mivok.net>
4
-
5
- RUN apk update && \
6
- apk add --no-cache ruby && \
7
- gem install --no-rdoc --no-ri mdl && \
8
- mkdir /data
9
-
10
- WORKDIR /data
11
-
12
- ENTRYPOINT ["mdl"]
13
- CMD ["--help"]
@@ -1,19 +0,0 @@
1
- # Docker container for markdownlint
2
-
3
- ## Using the docker image
4
-
5
- To check a single file:
6
-
7
- docker run --rm -v ${PWD}:/data mivok/markdownlint myfile.md
8
-
9
- Or, to check all files in a directory:
10
-
11
- docker run --rm -v ${PWD}:/data mivok/markdownlint .
12
-
13
- ## Building from a docker file
14
-
15
- The following will tag and upload a new release. Replace X.Y.Z as appropriate.
16
-
17
- docker build -t mivok/markdownlint:latest -t mivok/markdownlint:X.Y.Z .
18
- docker push mivok/markdownlint:latest
19
- docker push mivok/markdownling:X.Y.Z