mdl 0.5.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mdl +2 -2
  3. data/lib/mdl.rb +49 -40
  4. data/lib/mdl/cli.rb +92 -90
  5. data/lib/mdl/config.rb +2 -1
  6. data/lib/mdl/doc.rb +52 -59
  7. data/lib/mdl/kramdown_parser.rb +1 -1
  8. data/lib/mdl/rules.rb +224 -169
  9. data/lib/mdl/ruleset.rb +11 -10
  10. data/lib/mdl/style.rb +30 -8
  11. data/lib/mdl/styles/cirosantilli.rb +2 -2
  12. data/lib/mdl/styles/default.rb +1 -1
  13. data/lib/mdl/version.rb +1 -1
  14. data/mdl.gemspec +23 -20
  15. metadata +85 -289
  16. data/.gitignore +0 -13
  17. data/.travis.yml +0 -23
  18. data/CHANGELOG.md +0 -187
  19. data/README.md +0 -86
  20. data/Rakefile +0 -8
  21. data/docs/RULES.md +0 -1047
  22. data/docs/configuration.md +0 -99
  23. data/docs/creating_rules.md +0 -90
  24. data/docs/creating_styles.md +0 -47
  25. data/docs/rolling_a_release.md +0 -49
  26. data/example/markdown_spec.md +0 -897
  27. data/test/fixtures/default_mdlrc +0 -1
  28. data/test/fixtures/dir_with_md_and_markdown/bar.markdown +0 -1
  29. data/test/fixtures/dir_with_md_and_markdown/foo.md +0 -1
  30. data/test/fixtures/front_matter/jekyll_post.md +0 -16
  31. data/test/fixtures/mdlrc_disable_rules +0 -1
  32. data/test/fixtures/mdlrc_disable_tags +0 -1
  33. data/test/fixtures/mdlrc_enable_rules +0 -1
  34. data/test/fixtures/mdlrc_enable_tags +0 -1
  35. data/test/fixtures/my_ruleset.rb +0 -6
  36. data/test/rule_tests/alternate_top_level_header.md +0 -3
  37. data/test/rule_tests/alternate_top_level_header_style.rb +0 -4
  38. data/test/rule_tests/atx_closed_header_spacing.md +0 -17
  39. data/test/rule_tests/atx_header_spacing.md +0 -5
  40. data/test/rule_tests/blockquote_blank_lines.md +0 -31
  41. data/test/rule_tests/blockquote_spaces.md +0 -23
  42. data/test/rule_tests/bulleted_list_2_space_indent.md +0 -6
  43. data/test/rule_tests/bulleted_list_2_space_indent_style.rb +0 -3
  44. data/test/rule_tests/bulleted_list_4_space_indent.md +0 -3
  45. data/test/rule_tests/bulleted_list_not_at_beginning_of_line.md +0 -14
  46. data/test/rule_tests/code_block_consistency.md +0 -11
  47. data/test/rule_tests/code_block_consistency_style.rb +0 -1
  48. data/test/rule_tests/code_block_dollar.md +0 -33
  49. data/test/rule_tests/code_block_dollar_fence.md +0 -29
  50. data/test/rule_tests/code_block_fenced.md +0 -17
  51. data/test/rule_tests/code_block_fenced_style.rb +0 -1
  52. data/test/rule_tests/code_block_indented.md +0 -17
  53. data/test/rule_tests/code_block_indented_style.rb +0 -1
  54. data/test/rule_tests/consecutive_blank_lines.md +0 -11
  55. data/test/rule_tests/consistent_bullet_styles_asterisk.md +0 -3
  56. data/test/rule_tests/consistent_bullet_styles_dash.md +0 -3
  57. data/test/rule_tests/consistent_bullet_styles_plus.md +0 -3
  58. data/test/rule_tests/default_test_style.rb +0 -5
  59. data/test/rule_tests/emphasis_instead_of_headers.md +0 -40
  60. data/test/rule_tests/empty_doc.md +0 -0
  61. data/test/rule_tests/fenced_code_blocks.md +0 -27
  62. data/test/rule_tests/fenced_code_with_nesting.md +0 -73
  63. data/test/rule_tests/fenced_code_without_blank_lines.md +0 -42
  64. data/test/rule_tests/fenced_code_without_blank_lines_style.rb +0 -3
  65. data/test/rule_tests/first_header_bad_atx.md +0 -1
  66. data/test/rule_tests/first_header_bad_setext.md +0 -2
  67. data/test/rule_tests/first_header_good_atx.md +0 -1
  68. data/test/rule_tests/first_header_good_setext.md +0 -2
  69. data/test/rule_tests/first_line_top_level_header_atx.md +0 -3
  70. data/test/rule_tests/first_line_top_level_header_atx_style.rb +0 -2
  71. data/test/rule_tests/first_line_top_level_header_setext.md +0 -4
  72. data/test/rule_tests/first_line_top_level_header_setext_style.rb +0 -2
  73. data/test/rule_tests/fix_102_extra_nodes_in_link_text.md +0 -8
  74. data/test/rule_tests/header_duplicate_content.md +0 -11
  75. data/test/rule_tests/header_duplicate_content_different_nesting.md +0 -11
  76. data/test/rule_tests/header_duplicate_content_different_nesting_style.rb +0 -1
  77. data/test/rule_tests/header_duplicate_content_no_different_nesting.md +0 -13
  78. data/test/rule_tests/header_multiple_toplevel.md +0 -3
  79. data/test/rule_tests/header_mutliple_h1_no_toplevel.md +0 -5
  80. data/test/rule_tests/header_trailing_punctuation.md +0 -11
  81. data/test/rule_tests/header_trailing_punctuation_customized.md +0 -14
  82. data/test/rule_tests/header_trailing_punctuation_customized_style.rb +0 -2
  83. data/test/rule_tests/headers_bad.md +0 -7
  84. data/test/rule_tests/headers_good.md +0 -5
  85. data/test/rule_tests/headers_good_setext_with_atx.md +0 -7
  86. data/test/rule_tests/headers_good_setext_with_atx_style.rb +0 -2
  87. data/test/rule_tests/headers_good_with_issue_numbers.md +0 -12
  88. data/test/rule_tests/headers_surrounding_space_atx.md +0 -12
  89. data/test/rule_tests/headers_surrounding_space_setext.md +0 -15
  90. data/test/rule_tests/headers_with_spaces_at_the_beginning.md +0 -20
  91. data/test/rule_tests/hr_style_dashes.md +0 -22
  92. data/test/rule_tests/hr_style_dashes_style.rb +0 -3
  93. data/test/rule_tests/hr_style_inconsistent.md +0 -22
  94. data/test/rule_tests/hr_style_long.md +0 -22
  95. data/test/rule_tests/hr_style_long_style.rb +0 -3
  96. data/test/rule_tests/hr_style_stars.md +0 -22
  97. data/test/rule_tests/hr_style_stars_style.rb +0 -3
  98. data/test/rule_tests/inconsistent_bullet_indent_same_level.md +0 -4
  99. data/test/rule_tests/inconsistent_bullet_styles_asterisk.md +0 -3
  100. data/test/rule_tests/inconsistent_bullet_styles_dash.md +0 -3
  101. data/test/rule_tests/inconsistent_bullet_styles_plus.md +0 -3
  102. data/test/rule_tests/incorrect_bullet_style_asterisk.md +0 -3
  103. data/test/rule_tests/incorrect_bullet_style_asterisk_style.rb +0 -3
  104. data/test/rule_tests/incorrect_bullet_style_dash.md +0 -3
  105. data/test/rule_tests/incorrect_bullet_style_dash_style.rb +0 -3
  106. data/test/rule_tests/incorrect_bullet_style_plus.md +0 -3
  107. data/test/rule_tests/incorrect_bullet_style_plus_style.rb +0 -3
  108. data/test/rule_tests/incorrect_header_atx.md +0 -6
  109. data/test/rule_tests/incorrect_header_atx_closed.md +0 -6
  110. data/test/rule_tests/incorrect_header_atx_closed_style.rb +0 -2
  111. data/test/rule_tests/incorrect_header_atx_style.rb +0 -2
  112. data/test/rule_tests/incorrect_header_setext.md +0 -6
  113. data/test/rule_tests/incorrect_header_setext_style.rb +0 -2
  114. data/test/rule_tests/inline_html.md +0 -13
  115. data/test/rule_tests/links.md +0 -9
  116. data/test/rule_tests/lists_without_blank_lines.md +0 -75
  117. data/test/rule_tests/long_lines.md +0 -3
  118. data/test/rule_tests/long_lines_100.md +0 -7
  119. data/test/rule_tests/long_lines_100_style.rb +0 -3
  120. data/test/rule_tests/long_lines_code.md +0 -45
  121. data/test/rule_tests/long_lines_code_style.rb +0 -3
  122. data/test/rule_tests/mixed_header_types_atx.md +0 -6
  123. data/test/rule_tests/mixed_header_types_atx_closed.md +0 -6
  124. data/test/rule_tests/mixed_header_types_setext.md +0 -6
  125. data/test/rule_tests/no_first_line_header.md +0 -1
  126. data/test/rule_tests/no_first_line_header_style.rb +0 -1
  127. data/test/rule_tests/no_first_line_top_level_header.md +0 -1
  128. data/test/rule_tests/no_first_line_top_level_header_style.rb +0 -1
  129. data/test/rule_tests/ordered_list_item_prefix.md +0 -13
  130. data/test/rule_tests/ordered_list_item_prefix_ordered.md +0 -13
  131. data/test/rule_tests/ordered_list_item_prefix_ordered_style.rb +0 -3
  132. data/test/rule_tests/reversed_link.md +0 -7
  133. data/test/rule_tests/spaces_after_list_marker.md +0 -74
  134. data/test/rule_tests/spaces_after_list_marker_style.rb +0 -5
  135. data/test/rule_tests/spaces_inside_codespan_elements.md +0 -7
  136. data/test/rule_tests/spaces_inside_emphasis_markers.md +0 -35
  137. data/test/rule_tests/spaces_inside_link_text.md +0 -10
  138. data/test/rule_tests/trailing_spaces_br.md +0 -4
  139. data/test/rule_tests/trailing_spaces_br_style.rb +0 -3
  140. data/test/rule_tests/whitespace_issues.md +0 -3
  141. data/test/setup_tests.rb +0 -5
  142. data/test/test_cli.rb +0 -300
  143. data/test/test_ruledocs.rb +0 -52
  144. data/test/test_rules.rb +0 -58
  145. data/tools/README.md +0 -3
  146. data/tools/docker/Dockerfile +0 -13
  147. data/tools/docker/README.md +0 -19
  148. data/tools/test_location.rb +0 -20
  149. data/tools/view_markdown.rb +0 -11
@@ -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
@@ -1,20 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Script for identifying when markdownlint is receiving an incorrect line
3
- # number for an element. It checks all headers, then grabs the lines
4
- # associated with the headers according to markdown and compares the content,
5
- # printing out any that don't match.
6
- require 'mdl/doc'
7
- require 'pry'
8
-
9
- text = File.read(ARGV[0])
10
- unless ARGV[1].nil?
11
- # If we provide a second argument, then start the document from line N of
12
- # the original file.
13
- text = text.split("\n")[ARGV[1].to_i - 1..-1].join("\n")
14
- end
15
- doc = MarkdownLint::Doc.new(text)
16
- headers = doc.find_type(:header)
17
- bad_headers = headers.select do |e|
18
- doc.element_line(e).nil? || ! doc.element_line(e).include?(e[:raw_text])
19
- end
20
- pp bad_headers
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Quick script for viewing getting at kramdown's and markdownlint's view of a
3
- # markdown file
4
- require 'mdl/doc'
5
- require 'pry'
6
-
7
-
8
- doc = MarkdownLint::Doc.new_from_file(ARGV[0])
9
- children = doc.parsed.root.children
10
-
11
- binding.pry