mdl 0.0.1

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 (92) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +79 -0
  7. data/Rakefile +8 -0
  8. data/bin/mdl +10 -0
  9. data/docs/RULES.md +609 -0
  10. data/docs/creating_rules.md +83 -0
  11. data/docs/creating_styles.md +47 -0
  12. data/example/markdown_spec.md +897 -0
  13. data/lib/mdl.rb +72 -0
  14. data/lib/mdl/cli.rb +89 -0
  15. data/lib/mdl/config.rb +9 -0
  16. data/lib/mdl/doc.rb +252 -0
  17. data/lib/mdl/kramdown_parser.rb +29 -0
  18. data/lib/mdl/rules.rb +393 -0
  19. data/lib/mdl/ruleset.rb +47 -0
  20. data/lib/mdl/style.rb +50 -0
  21. data/lib/mdl/styles/all.rb +1 -0
  22. data/lib/mdl/styles/cirosantilli.rb +6 -0
  23. data/lib/mdl/styles/default.rb +1 -0
  24. data/lib/mdl/styles/relaxed.rb +6 -0
  25. data/lib/mdl/version.rb +3 -0
  26. data/mdl.gemspec +31 -0
  27. data/test/rule_tests/atx_closed_header_spacing.md +17 -0
  28. data/test/rule_tests/atx_header_spacing.md +5 -0
  29. data/test/rule_tests/blockquote_blank_lines.md +31 -0
  30. data/test/rule_tests/blockquote_spaces.md +21 -0
  31. data/test/rule_tests/bulleted_list_2_space_indent.md +6 -0
  32. data/test/rule_tests/bulleted_list_2_space_indent_style.rb +2 -0
  33. data/test/rule_tests/bulleted_list_4_space_indent.md +3 -0
  34. data/test/rule_tests/bulleted_list_not_at_beginning_of_line.md +14 -0
  35. data/test/rule_tests/code_block_dollar.md +22 -0
  36. data/test/rule_tests/consecutive_blank_lines.md +11 -0
  37. data/test/rule_tests/consistent_bullet_styles_asterisk.md +3 -0
  38. data/test/rule_tests/consistent_bullet_styles_dash.md +3 -0
  39. data/test/rule_tests/consistent_bullet_styles_plus.md +3 -0
  40. data/test/rule_tests/empty_doc.md +0 -0
  41. data/test/rule_tests/fenced_code_blocks.md +21 -0
  42. data/test/rule_tests/first_header_bad_atx.md +1 -0
  43. data/test/rule_tests/first_header_bad_setext.md +2 -0
  44. data/test/rule_tests/first_header_good_atx.md +1 -0
  45. data/test/rule_tests/first_header_good_setext.md +2 -0
  46. data/test/rule_tests/header_duplicate_content.md +11 -0
  47. data/test/rule_tests/header_multiple_toplevel.md +3 -0
  48. data/test/rule_tests/header_mutliple_h1_no_toplevel.md +5 -0
  49. data/test/rule_tests/header_trailing_punctuation.md +11 -0
  50. data/test/rule_tests/header_trailing_punctuation_customized.md +14 -0
  51. data/test/rule_tests/header_trailing_punctuation_customized_style.rb +2 -0
  52. data/test/rule_tests/headers_bad.md +7 -0
  53. data/test/rule_tests/headers_good.md +5 -0
  54. data/test/rule_tests/headers_surrounding_space_atx.md +9 -0
  55. data/test/rule_tests/headers_surrounding_space_setext.md +15 -0
  56. data/test/rule_tests/headers_with_spaces_at_the_beginning.md +9 -0
  57. data/test/rule_tests/inconsistent_bullet_indent_same_level.md +4 -0
  58. data/test/rule_tests/inconsistent_bullet_styles_asterisk.md +3 -0
  59. data/test/rule_tests/inconsistent_bullet_styles_dash.md +3 -0
  60. data/test/rule_tests/inconsistent_bullet_styles_plus.md +3 -0
  61. data/test/rule_tests/incorrect_bullet_style_asterisk.md +3 -0
  62. data/test/rule_tests/incorrect_bullet_style_asterisk_style.rb +2 -0
  63. data/test/rule_tests/incorrect_bullet_style_dash.md +3 -0
  64. data/test/rule_tests/incorrect_bullet_style_dash_style.rb +2 -0
  65. data/test/rule_tests/incorrect_bullet_style_plus.md +3 -0
  66. data/test/rule_tests/incorrect_bullet_style_plus_style.rb +2 -0
  67. data/test/rule_tests/incorrect_header_atx.md +6 -0
  68. data/test/rule_tests/incorrect_header_atx_closed.md +6 -0
  69. data/test/rule_tests/incorrect_header_atx_closed_style.rb +2 -0
  70. data/test/rule_tests/incorrect_header_atx_style.rb +2 -0
  71. data/test/rule_tests/incorrect_header_setext.md +6 -0
  72. data/test/rule_tests/incorrect_header_setext_style.rb +2 -0
  73. data/test/rule_tests/long_lines.md +3 -0
  74. data/test/rule_tests/long_lines_100.md +7 -0
  75. data/test/rule_tests/long_lines_100_style.rb +2 -0
  76. data/test/rule_tests/mixed_header_types_atx.md +6 -0
  77. data/test/rule_tests/mixed_header_types_atx_closed.md +6 -0
  78. data/test/rule_tests/mixed_header_types_setext.md +6 -0
  79. data/test/rule_tests/ordered_list_item_prefix.md +13 -0
  80. data/test/rule_tests/ordered_list_item_prefix_ordered.md +13 -0
  81. data/test/rule_tests/ordered_list_item_prefix_ordered_style.rb +2 -0
  82. data/test/rule_tests/reversed_link.md +7 -0
  83. data/test/rule_tests/spaces_after_list_marker.md +74 -0
  84. data/test/rule_tests/spaces_after_list_marker_style.rb +3 -0
  85. data/test/rule_tests/whitespace issues.md +3 -0
  86. data/test/setup_tests.rb +5 -0
  87. data/test/test_ruledocs.rb +45 -0
  88. data/test/test_rules.rb +56 -0
  89. data/tools/README.md +3 -0
  90. data/tools/test_location.rb +20 -0
  91. data/tools/view_markdown.rb +11 -0
  92. metadata +314 -0
@@ -0,0 +1 @@
1
+ all
@@ -0,0 +1,6 @@
1
+ # Enforce the style guide at http://www.cirosantilli.com/markdown-styleguide
2
+ all
3
+ rule 'MD003', :style => :atx
4
+ rule 'MD004', :style => :dash
5
+ rule 'MD007', :indent => 4
6
+ rule 'MD030', :ul_multi => 3, :ol_multi => 2
@@ -0,0 +1 @@
1
+ all
@@ -0,0 +1,6 @@
1
+ all
2
+ exclude_tag :whitespace
3
+ exclude_tag :line_length
4
+
5
+ exclude_rule 'MD006' # Lists at beginning of line
6
+ exclude_rule 'MD007' # List indentation
@@ -0,0 +1,3 @@
1
+ module MarkdownLint
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mdl/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mdl"
8
+ spec.version = MarkdownLint::VERSION
9
+ spec.authors = ["Mark Harrison"]
10
+ spec.email = ["mark@mivok.net"]
11
+ spec.summary = %q{Markdown lint tool}
12
+ spec.description = %q{Style checker/lint tool for markdown files}
13
+ spec.homepage = "http://github.com/mivok/mdl"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.required_ruby_version = '>= 1.9.2'
22
+
23
+ spec.add_dependency 'kramdown', '~> 1.4', '>= 1.4.0'
24
+ spec.add_dependency 'mixlib-config', '~> 2.1', '>= 2.1.0'
25
+ spec.add_dependency 'mixlib-cli', '~> 1.5', '>= 1.5.0'
26
+
27
+ spec.add_development_dependency 'bundler', '~> 1.5'
28
+ spec.add_development_dependency 'rake', '~> 10.0'
29
+ spec.add_development_dependency 'minitest', '~> 5.0'
30
+ spec.add_development_dependency 'pry', '~> 0.10'
31
+ end
@@ -0,0 +1,17 @@
1
+ #Header 1 {MD020} #
2
+
3
+ ## Header 2 {MD020}##
4
+
5
+ ##Header 3 {MD020}##
6
+
7
+ ## Header 4 {MD021} ##
8
+
9
+ ## Header 5 {MD021} ##
10
+
11
+ ## Header 6 {MD021} ##
12
+
13
+ ## Header 7 {MD021} ##
14
+
15
+ ## Header 8 \#
16
+
17
+ ## Header 9 \#
@@ -0,0 +1,5 @@
1
+ #Header 1 {MD018}
2
+
3
+ ## Header 2 {MD019}
4
+
5
+ ## Header 3 {MD019}
@@ -0,0 +1,31 @@
1
+ Some text
2
+
3
+ > a quote
4
+ > same quote
5
+
6
+ > blank line above me
7
+
8
+
9
+ > two blank lines above me
10
+
11
+ > space above me
12
+
13
+ * List with embedded blockquote
14
+
15
+ > Test
16
+ > Test
17
+
18
+ > Test
19
+
20
+ * Item 2
21
+
22
+ > Test. The blank line below should _not_ trigger MD028 as one blockquote is
23
+ > inside the list, and the other is outside it.
24
+
25
+ > Test
26
+
27
+ Expected errors:
28
+
29
+ {MD028:5} {MD028:8} {MD028:10} {MD028:17}
30
+ {MD009:10} (trailing space is intentional)
31
+ {MD012:8} (multiple blank lines are intentional)
@@ -0,0 +1,21 @@
1
+ Some text
2
+
3
+ > Hello world
4
+ > Foo {MD027}
5
+ > Bar {MD027}
6
+
7
+ This tests other things embedded in the blockquote:
8
+
9
+ > *Hello world*
10
+ > *foo* {MD027}
11
+ > **bar** {MD027}
12
+ > "Baz" {MD027}
13
+ > *foo*
14
+ > **bar**
15
+ > 'baz'
16
+
17
+ Test the first line being indented too much:
18
+
19
+ > Foo {MD027}
20
+ > Bar {MD027}
21
+ > Baz
@@ -0,0 +1,6 @@
1
+ This is a document where the lists are indented by 2 spaces, but the style is
2
+ set to 4 space indents for lists:
3
+
4
+ * Test X
5
+ * Test Y {MD007}
6
+ * Test Z {MD007}
@@ -0,0 +1,2 @@
1
+ all
2
+ rule 'MD007', :indent => 4
@@ -0,0 +1,3 @@
1
+ * Test X
2
+ * Test Y {MD007}
3
+ * Test Z {MD007}
@@ -0,0 +1,14 @@
1
+ Some text
2
+
3
+ * Item {MD006}
4
+ * Item
5
+ * Item
6
+ * Item
7
+ * Item
8
+ * Item
9
+ * Item
10
+
11
+ Some more text
12
+
13
+ * Item {MD006}
14
+ * Item
@@ -0,0 +1,22 @@
1
+ The following code block shouldn't have $ before the commands:
2
+
3
+ $ ls {MD014}
4
+ $ less foo
5
+
6
+ $ cat bar
7
+
8
+ However the following code block shows output, and $ can be used to
9
+ distinguish between command and output:
10
+
11
+ $ ls
12
+ foo bar
13
+ $ less foo
14
+ Hello world
15
+
16
+ $ cat bar
17
+ baz
18
+
19
+ The following code block uses variable names, and likewise shouldn't fire:
20
+
21
+ $foo = 'bar';
22
+ $baz = 'qux';
@@ -0,0 +1,11 @@
1
+ Some text
2
+
3
+
4
+ Some text {MD012:3}
5
+
6
+ This is a code block
7
+
8
+
9
+ with two blank lines in it
10
+
11
+ Some more text
@@ -0,0 +1,3 @@
1
+ * Item
2
+ * Item
3
+ * Item
@@ -0,0 +1,3 @@
1
+ - Item
2
+ - Item
3
+ - Item
@@ -0,0 +1,3 @@
1
+ + Item
2
+ + Item
3
+ + Item
File without changes
@@ -0,0 +1,21 @@
1
+ This is a GFM-style fenced code block:
2
+
3
+ ``` bash
4
+ #!/bin/bash
5
+
6
+ # Print something to stdout:
7
+ echo "Hello"
8
+ echo "World"
9
+ ```
10
+
11
+ This is a kramdown-style fenced code block:
12
+
13
+ ~~~ bash
14
+ #!/bin/bash
15
+
16
+ # Print something to stdout:
17
+ echo "Hello"
18
+ echo "World"
19
+ ~~~
20
+
21
+ None of the above should trigger any heading related rules.
@@ -0,0 +1 @@
1
+ ## Header {MD002}
@@ -0,0 +1,2 @@
1
+ Header {MD002}
2
+ --------------
@@ -0,0 +1 @@
1
+ # Header
@@ -0,0 +1,2 @@
1
+ Header
2
+ ======
@@ -0,0 +1,11 @@
1
+ # Header 1
2
+
3
+ ## Header 2
4
+
5
+ ## Header 1
6
+
7
+ ### Header 2
8
+
9
+ ## Header 3
10
+
11
+ {MD024:5} {MD024:7}
@@ -0,0 +1,3 @@
1
+ # Heading 1
2
+
3
+ # Heading 2 {MD025}
@@ -0,0 +1,5 @@
1
+ Some introductory text
2
+
3
+ # Heading 1
4
+
5
+ # Heading 2
@@ -0,0 +1,11 @@
1
+ # Heading 1 {MD026}.
2
+
3
+ ## Heading 2 {MD026},
4
+
5
+ ## Heading 3 {MD026}!
6
+
7
+ ## Heading 4 {MD026}:
8
+
9
+ ## Heading 5 {MD026};
10
+
11
+ ## Heading 6 {MD026}?
@@ -0,0 +1,14 @@
1
+ # Heading 1 {MD026}.
2
+
3
+ ## Heading 2 {MD026},
4
+
5
+ ## Heading 3 {MD026}!
6
+
7
+ ## Heading 4 {MD026}:
8
+
9
+ ## Heading 5 {MD026};
10
+
11
+ ## Heading 6?
12
+
13
+ The rule has been customized to allow question marks while disallowing
14
+ everything else.
@@ -0,0 +1,2 @@
1
+ all
2
+ rule 'MD026', :punctuation => '.,;:!'
@@ -0,0 +1,7 @@
1
+ # Header
2
+
3
+ ### Header 3 {MD001}
4
+
5
+ ## Header 2
6
+
7
+ #### Header 4 {MD001}
@@ -0,0 +1,5 @@
1
+ # Heading 1
2
+
3
+ ## Heading 2
4
+
5
+ ## Heading 3
@@ -0,0 +1,9 @@
1
+ # Header 1
2
+
3
+ ## Header 2 {MD022}
4
+ Some text
5
+ ## Header 3 {MD022}
6
+ Some text
7
+ ## Header 4 {MD022}
8
+
9
+ ## Header 5
@@ -0,0 +1,15 @@
1
+ Header 1
2
+ ========
3
+
4
+ Header 2 {MD022}
5
+ ----------------
6
+ Some text
7
+ Header 3 {MD022}
8
+ ================
9
+ Some text
10
+ Header 4 {MD022}
11
+ ================
12
+ Some text
13
+
14
+ Header 5
15
+ --------
@@ -0,0 +1,9 @@
1
+ Some text
2
+
3
+ # Header 1 {MD023}
4
+
5
+ Setext style fully indented {MD023}
6
+ ===================================
7
+
8
+ Setext style title only indented {MD023}
9
+ =========================================
@@ -0,0 +1,4 @@
1
+ * Item
2
+ * Item {MD007}
3
+ * Item {MD005}
4
+ * Item
@@ -0,0 +1,3 @@
1
+ * Item
2
+ + Item {MD004}
3
+ - Item {MD004}
@@ -0,0 +1,3 @@
1
+ - Item
2
+ * Item {MD004}
3
+ + Item {MD004}
@@ -0,0 +1,3 @@
1
+ + Item
2
+ * Item {MD004}
3
+ - Item {MD004}
@@ -0,0 +1,3 @@
1
+ * Item
2
+ - Item {MD004}
3
+ + Item {MD004}
@@ -0,0 +1,2 @@
1
+ all
2
+ rule 'MD004', :style => :asterisk
@@ -0,0 +1,3 @@
1
+ * Item {MD004}
2
+ - Item
3
+ + Item {MD004}
@@ -0,0 +1,2 @@
1
+ all
2
+ rule 'MD004', :style => :dash
@@ -0,0 +1,3 @@
1
+ * Item {MD004}
2
+ - Item {MD004}
3
+ + Item
@@ -0,0 +1,2 @@
1
+ all
2
+ rule 'MD004', :style => :plus
@@ -0,0 +1,6 @@
1
+ # Header 1 {MD003} #
2
+
3
+ ## Header 2
4
+
5
+ Header 3 {MD003}
6
+ ----------------
@@ -0,0 +1,6 @@
1
+ # Header 1 #
2
+
3
+ ## Header 2 {MD003}
4
+
5
+ Header 3 {MD003}
6
+ ----------------
@@ -0,0 +1,2 @@
1
+ all
2
+ rule 'MD003', :style => :atx_closed
@@ -0,0 +1,2 @@
1
+ all
2
+ rule 'MD003', :style => :atx