mdl 0.5.0 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/mdl +2 -2
- data/lib/mdl.rb +49 -40
- data/lib/mdl/cli.rb +92 -90
- data/lib/mdl/config.rb +2 -1
- data/lib/mdl/doc.rb +52 -59
- data/lib/mdl/kramdown_parser.rb +1 -1
- data/lib/mdl/rules.rb +224 -169
- data/lib/mdl/ruleset.rb +11 -10
- data/lib/mdl/style.rb +30 -8
- data/lib/mdl/styles/cirosantilli.rb +2 -2
- data/lib/mdl/styles/default.rb +1 -1
- data/lib/mdl/version.rb +1 -1
- data/mdl.gemspec +23 -20
- metadata +85 -289
- data/.gitignore +0 -13
- data/.travis.yml +0 -23
- data/CHANGELOG.md +0 -187
- data/README.md +0 -86
- data/Rakefile +0 -8
- data/docs/RULES.md +0 -1047
- data/docs/configuration.md +0 -99
- data/docs/creating_rules.md +0 -90
- data/docs/creating_styles.md +0 -47
- data/docs/rolling_a_release.md +0 -49
- data/example/markdown_spec.md +0 -897
- data/test/fixtures/default_mdlrc +0 -1
- data/test/fixtures/dir_with_md_and_markdown/bar.markdown +0 -1
- data/test/fixtures/dir_with_md_and_markdown/foo.md +0 -1
- data/test/fixtures/front_matter/jekyll_post.md +0 -16
- data/test/fixtures/mdlrc_disable_rules +0 -1
- data/test/fixtures/mdlrc_disable_tags +0 -1
- data/test/fixtures/mdlrc_enable_rules +0 -1
- data/test/fixtures/mdlrc_enable_tags +0 -1
- data/test/fixtures/my_ruleset.rb +0 -6
- data/test/rule_tests/alternate_top_level_header.md +0 -3
- data/test/rule_tests/alternate_top_level_header_style.rb +0 -4
- data/test/rule_tests/atx_closed_header_spacing.md +0 -17
- data/test/rule_tests/atx_header_spacing.md +0 -5
- data/test/rule_tests/blockquote_blank_lines.md +0 -31
- data/test/rule_tests/blockquote_spaces.md +0 -23
- data/test/rule_tests/bulleted_list_2_space_indent.md +0 -6
- data/test/rule_tests/bulleted_list_2_space_indent_style.rb +0 -3
- data/test/rule_tests/bulleted_list_4_space_indent.md +0 -3
- data/test/rule_tests/bulleted_list_not_at_beginning_of_line.md +0 -14
- data/test/rule_tests/code_block_consistency.md +0 -11
- data/test/rule_tests/code_block_consistency_style.rb +0 -1
- data/test/rule_tests/code_block_dollar.md +0 -33
- data/test/rule_tests/code_block_dollar_fence.md +0 -29
- data/test/rule_tests/code_block_fenced.md +0 -17
- data/test/rule_tests/code_block_fenced_style.rb +0 -1
- data/test/rule_tests/code_block_indented.md +0 -17
- data/test/rule_tests/code_block_indented_style.rb +0 -1
- data/test/rule_tests/consecutive_blank_lines.md +0 -11
- data/test/rule_tests/consistent_bullet_styles_asterisk.md +0 -3
- data/test/rule_tests/consistent_bullet_styles_dash.md +0 -3
- data/test/rule_tests/consistent_bullet_styles_plus.md +0 -3
- data/test/rule_tests/default_test_style.rb +0 -5
- data/test/rule_tests/emphasis_instead_of_headers.md +0 -40
- data/test/rule_tests/empty_doc.md +0 -0
- data/test/rule_tests/fenced_code_blocks.md +0 -27
- data/test/rule_tests/fenced_code_with_nesting.md +0 -73
- data/test/rule_tests/fenced_code_without_blank_lines.md +0 -42
- data/test/rule_tests/fenced_code_without_blank_lines_style.rb +0 -3
- data/test/rule_tests/first_header_bad_atx.md +0 -1
- data/test/rule_tests/first_header_bad_setext.md +0 -2
- data/test/rule_tests/first_header_good_atx.md +0 -1
- data/test/rule_tests/first_header_good_setext.md +0 -2
- data/test/rule_tests/first_line_top_level_header_atx.md +0 -3
- data/test/rule_tests/first_line_top_level_header_atx_style.rb +0 -2
- data/test/rule_tests/first_line_top_level_header_setext.md +0 -4
- data/test/rule_tests/first_line_top_level_header_setext_style.rb +0 -2
- data/test/rule_tests/fix_102_extra_nodes_in_link_text.md +0 -8
- data/test/rule_tests/header_duplicate_content.md +0 -11
- data/test/rule_tests/header_duplicate_content_different_nesting.md +0 -11
- data/test/rule_tests/header_duplicate_content_different_nesting_style.rb +0 -1
- data/test/rule_tests/header_duplicate_content_no_different_nesting.md +0 -13
- data/test/rule_tests/header_multiple_toplevel.md +0 -3
- data/test/rule_tests/header_mutliple_h1_no_toplevel.md +0 -5
- data/test/rule_tests/header_trailing_punctuation.md +0 -11
- data/test/rule_tests/header_trailing_punctuation_customized.md +0 -14
- data/test/rule_tests/header_trailing_punctuation_customized_style.rb +0 -2
- data/test/rule_tests/headers_bad.md +0 -7
- data/test/rule_tests/headers_good.md +0 -5
- data/test/rule_tests/headers_good_setext_with_atx.md +0 -7
- data/test/rule_tests/headers_good_setext_with_atx_style.rb +0 -2
- data/test/rule_tests/headers_good_with_issue_numbers.md +0 -12
- data/test/rule_tests/headers_surrounding_space_atx.md +0 -12
- data/test/rule_tests/headers_surrounding_space_setext.md +0 -15
- data/test/rule_tests/headers_with_spaces_at_the_beginning.md +0 -20
- data/test/rule_tests/hr_style_dashes.md +0 -22
- data/test/rule_tests/hr_style_dashes_style.rb +0 -3
- data/test/rule_tests/hr_style_inconsistent.md +0 -22
- data/test/rule_tests/hr_style_long.md +0 -22
- data/test/rule_tests/hr_style_long_style.rb +0 -3
- data/test/rule_tests/hr_style_stars.md +0 -22
- data/test/rule_tests/hr_style_stars_style.rb +0 -3
- data/test/rule_tests/inconsistent_bullet_indent_same_level.md +0 -4
- data/test/rule_tests/inconsistent_bullet_styles_asterisk.md +0 -3
- data/test/rule_tests/inconsistent_bullet_styles_dash.md +0 -3
- data/test/rule_tests/inconsistent_bullet_styles_plus.md +0 -3
- data/test/rule_tests/incorrect_bullet_style_asterisk.md +0 -3
- data/test/rule_tests/incorrect_bullet_style_asterisk_style.rb +0 -3
- data/test/rule_tests/incorrect_bullet_style_dash.md +0 -3
- data/test/rule_tests/incorrect_bullet_style_dash_style.rb +0 -3
- data/test/rule_tests/incorrect_bullet_style_plus.md +0 -3
- data/test/rule_tests/incorrect_bullet_style_plus_style.rb +0 -3
- data/test/rule_tests/incorrect_header_atx.md +0 -6
- data/test/rule_tests/incorrect_header_atx_closed.md +0 -6
- data/test/rule_tests/incorrect_header_atx_closed_style.rb +0 -2
- data/test/rule_tests/incorrect_header_atx_style.rb +0 -2
- data/test/rule_tests/incorrect_header_setext.md +0 -6
- data/test/rule_tests/incorrect_header_setext_style.rb +0 -2
- data/test/rule_tests/inline_html.md +0 -13
- data/test/rule_tests/links.md +0 -9
- data/test/rule_tests/lists_without_blank_lines.md +0 -75
- data/test/rule_tests/long_lines.md +0 -3
- data/test/rule_tests/long_lines_100.md +0 -7
- data/test/rule_tests/long_lines_100_style.rb +0 -3
- data/test/rule_tests/long_lines_code.md +0 -45
- data/test/rule_tests/long_lines_code_style.rb +0 -3
- data/test/rule_tests/mixed_header_types_atx.md +0 -6
- data/test/rule_tests/mixed_header_types_atx_closed.md +0 -6
- data/test/rule_tests/mixed_header_types_setext.md +0 -6
- data/test/rule_tests/no_first_line_header.md +0 -1
- data/test/rule_tests/no_first_line_header_style.rb +0 -1
- data/test/rule_tests/no_first_line_top_level_header.md +0 -1
- data/test/rule_tests/no_first_line_top_level_header_style.rb +0 -1
- data/test/rule_tests/ordered_list_item_prefix.md +0 -13
- data/test/rule_tests/ordered_list_item_prefix_ordered.md +0 -13
- data/test/rule_tests/ordered_list_item_prefix_ordered_style.rb +0 -3
- data/test/rule_tests/reversed_link.md +0 -7
- data/test/rule_tests/spaces_after_list_marker.md +0 -74
- data/test/rule_tests/spaces_after_list_marker_style.rb +0 -5
- data/test/rule_tests/spaces_inside_codespan_elements.md +0 -7
- data/test/rule_tests/spaces_inside_emphasis_markers.md +0 -35
- data/test/rule_tests/spaces_inside_link_text.md +0 -10
- data/test/rule_tests/trailing_spaces_br.md +0 -4
- data/test/rule_tests/trailing_spaces_br_style.rb +0 -3
- data/test/rule_tests/whitespace_issues.md +0 -3
- data/test/setup_tests.rb +0 -5
- data/test/test_cli.rb +0 -300
- data/test/test_ruledocs.rb +0 -52
- data/test/test_rules.rb +0 -58
- data/tools/README.md +0 -3
- data/tools/docker/Dockerfile +0 -13
- data/tools/docker/README.md +0 -19
- data/tools/test_location.rb +0 -20
- data/tools/view_markdown.rb +0 -11
data/test/test_ruledocs.rb
DELETED
@@ -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
|
data/test/test_rules.rb
DELETED
@@ -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
|
data/tools/README.md
DELETED
data/tools/docker/Dockerfile
DELETED
data/tools/docker/README.md
DELETED
@@ -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
|
data/tools/test_location.rb
DELETED
@@ -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
|
data/tools/view_markdown.rb
DELETED
@@ -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
|