mdl 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e51fd852e7791bcde9513e139c43c93fc0377ec3
4
- data.tar.gz: d566428c48d875eb1bd0f89e4cdff094f50a23d6
2
+ SHA256:
3
+ metadata.gz: 38b73db54b5ec02a8b079558f3cb444c3f29e7ffd0e9a752483115d5c0a13a93
4
+ data.tar.gz: 47c88efb0b9aa6ac538c769096d02d36170109ef4a7bc9e4370af8d45143c6d0
5
5
  SHA512:
6
- metadata.gz: dd7a9864461857232915798e54111bfeaf3cc957b53fed0dc74bc28e94496e13616f91be2e2b930f38fcbb1581108f8e41e4dd5e642eb6f2cd411becb31376a8
7
- data.tar.gz: d561fd970ab869fb6a43780e19b20d861e4f46a48e891bfc9e5e99c464afcfc0295715e22f2c2986ca0b70f91c7b0b3b41b660519586d5ffa3eed705f63f9527
6
+ metadata.gz: 3a9c8c520e4f1e31517bb4b34549e45c505f86ed84daff6548092df02a34b594a7b81a8c4972ea93ba14fd75d4ea8a753e5c8f6f67994857d3e55449fbeb55bf
7
+ data.tar.gz: a8b3d72b3ff83bd86eb72c3b3911d16a5951ebc26372fa40995662f9372931aa192948517eafb7d7a8ec3eb0ede0d226423754c60c037543d7d55023d55f801f
@@ -1,9 +1,23 @@
1
+ sudo: false
2
+ dist: trusty
1
3
  language: ruby
2
4
 
5
+ notifications:
6
+ email: false
7
+
8
+ # Temporary disable of jruby testing. There are problems on travis-ci
9
+ # currently with this. See:
10
+ #
11
+ # https://github.com/travis-ci/travis-ci/issues/9826
12
+ #
13
+ # before_install:
14
+ # - unset _JAVA_OPTIONS
15
+
3
16
  matrix:
4
17
  include:
5
- - rvm: 2.1.10
6
- - rvm: 2.2.5
7
- - rvm: 2.3.1
8
- - rvm: jruby-9.1.2.0
9
- env: JRUBY_OPTS="--dev"
18
+ - rvm: 2.3.4
19
+ - rvm: 2.4.1
20
+ - rvm: 2.5.1
21
+ # - rvm: jruby-9.1.9.0
22
+ # env: JRUBY_OPTS="--dev"
23
+ # - rvm: jruby-9.2.0.0
@@ -1,5 +1,27 @@
1
1
  # Change Log
2
2
 
3
+ ## [Unreleased]
4
+
5
+ ### Changed
6
+
7
+ ## [v0.5.0]
8
+
9
+ ### Added
10
+
11
+ * Add md042 to enforce code block style
12
+ * JSON formatter/output
13
+
14
+ ### Changed
15
+
16
+ * PR #200: allow different nesting on headers duplication check
17
+ * MD036 - Ignore multi-line emphasized paragraphs, and emphasized paragraphs
18
+ that end in punctuation (#140)
19
+
20
+ ### Fixed
21
+
22
+ * PR #168: fix issue numbers false positives
23
+ * Fix issue #102: lint MD039 checking for nodes inside link text
24
+
3
25
  ## [v0.4.0] (2016-08-22)
4
26
 
5
27
  ### Added
@@ -33,7 +55,7 @@
33
55
  ### Added
34
56
 
35
57
  * You can now load your own custom rules with the `-u` option. See
36
- [rules.rb](https://github.com/mivok/markdownlint/blob/master/lib/mdl/rules.rb)
58
+ [rules.rb](https://github.com/markdownlint/markdownlint/blob/master/lib/mdl/rules.rb)
37
59
  for an example of what a rules file looks like. Use the `-d` option if you
38
60
  don't want to load markdownlint's default ruleset.
39
61
  * You can now refer to rules by human-readable/writable aliases, such as
@@ -55,20 +77,20 @@
55
77
  * Crash with MD034 and pipe character (#93, #97)
56
78
  * MD031 failed on nested code blocks (#100, #109)
57
79
  * MD037 crashes on <li> with underscores (#83)
58
- * Regression introducted in v0.2.1 - ignoring rules/tags on the command line
80
+ * Regression introduced in v0.2.1 - ignoring rules/tags on the command line
59
81
  caused a crash (#108)
60
82
  * MD027 false positive when line starts with a backtick (#105)
61
83
 
62
84
  ### Merged pull requests
63
85
 
64
86
  * [Add support for nested code fences to MD031/MD032 - David
65
- Anson](https://github.com/mivok/markdownlint/pull/109)
87
+ Anson](https://github.com/markdownlint/markdownlint/pull/109)
66
88
  * [Add missing word to description of MD035 in RULES.md - David
67
- Anson](https://github.com/mivok/markdownlint/pull/86)
89
+ Anson](https://github.com/markdownlint/markdownlint/pull/86)
68
90
  * [Probe for .mdlrc in current and parent directories - Loic
69
- Nageleisen](https://github.com/mivok/markdownlint/pull/111)
91
+ Nageleisen](https://github.com/markdownlint/markdownlint/pull/111)
70
92
  * [MD013: allow excluding code blocks and tables - Loic
71
- Nageleisen](https://github.com/mivok/markdownlint/pull/112)
93
+ Nageleisen](https://github.com/markdownlint/markdownlint/pull/112)
72
94
 
73
95
  ## [v0.2.1] (2015-04-13)
74
96
 
@@ -104,7 +126,7 @@
104
126
 
105
127
  ### Merged pull requests
106
128
 
107
- * [Add parameter (value and default) information to rule documentation. - David Anson](https://github.com/mivok/markdownlint/pull/76)
129
+ * [Add parameter (value and default) information to rule documentation. - David Anson](https://github.com/markdownlint/markdownlint/pull/76)
108
130
 
109
131
  ## [v0.1.0] (2015-02-22)
110
132
 
@@ -119,10 +141,10 @@
119
141
 
120
142
  ### Merged pull requests
121
143
 
122
- * [MD032 - Lists should be surrounded by blank lines - David Anson](https://github.com/mivok/markdownlint/pull/70)
123
- * [MD031 - Fenced code blocks should be surrounded by blank lines - David Anson](https://github.com/mivok/markdownlint/pull/68)
124
- * [Clarify how to specify your own style - mjankowski](https://github.com/mivok/markdownlint/pull/65)
125
- * [Use single quotes to prevent early escaping - highb](https://github.com/mivok/markdownlint/pull/64)
144
+ * [MD032 - Lists should be surrounded by blank lines - David Anson](https://github.com/markdownlint/markdownlint/pull/70)
145
+ * [MD031 - Fenced code blocks should be surrounded by blank lines - David Anson](https://github.com/markdownlint/markdownlint/pull/68)
146
+ * [Clarify how to specify your own style - mjankowski](https://github.com/markdownlint/markdownlint/pull/65)
147
+ * [Use single quotes to prevent early escaping - highb](https://github.com/markdownlint/markdownlint/pull/64)
126
148
 
127
149
  ## [v0.0.1] (2014-09-07)
128
150
 
@@ -155,11 +177,11 @@
155
177
  * MD029 - Ordered list item prefix
156
178
  * MD030 - Spaces after list markers
157
179
 
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
180
+ [Unreleased]: https://github.com/markdownlint/markdownlint/tree/master
181
+ [v0.4.0]: https://github.com/markdownlint/markdownlint/tree/v0.4.0
182
+ [v0.3.1]: https://github.com/markdownlint/markdownlint/tree/v0.3.1
183
+ [v0.3.0]: https://github.com/markdownlint/markdownlint/tree/v0.3.0
184
+ [v0.2.1]: https://github.com/markdownlint/markdownlint/tree/v0.2.1
185
+ [v0.2.0]: https://github.com/markdownlint/markdownlint/tree/v0.2.0
186
+ [v0.1.0]: https://github.com/markdownlint/markdownlint/tree/v0.1.0
187
+ [v0.0.1]: https://github.com/markdownlint/markdownlint/tree/v0.0.1
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Issues on deck](https://badge.waffle.io/mivok/markdownlint.png?label=on%20deck&title=On%20Deck)](https://waffle.io/mivok/markdownlint)
2
- [![Travis build status](http://api.travis-ci.org/mivok/markdownlint.svg)](https://travis-ci.org/mivok/markdownlint)
2
+ [![Travis build status](http://api.travis-ci.org/markdownlint/markdownlint.svg)](https://travis-ci.org/markdownlint/markdownlint)
3
3
  [![Gem Version](https://badge.fury.io/rb/mdl.svg)](http://badge.fury.io/rb/mdl)
4
4
 
5
5
  # Markdown lint tool
@@ -18,7 +18,7 @@ To install from rubygems, run:
18
18
 
19
19
  To install the latest development version from github:
20
20
 
21
- git clone https://github.com/mivok/markdownlint
21
+ git clone https://github.com/markdownlint/markdownlint
22
22
  cd markdownlint
23
23
  rake install
24
24
 
@@ -79,7 +79,7 @@ For more information on creating style files, see the
79
79
 
80
80
  ## Contributing
81
81
 
82
- 1. Fork it ( <http://github.com/mivok/markdownlint/fork> )
82
+ 1. Fork it ( <http://github.com/markdownlint/markdownlint/fork> )
83
83
  1. Create your feature branch (`git checkout -b my-new-feature`)
84
84
  1. Commit your changes (`git commit -am 'Add some feature'`)
85
85
  1. Push to the branch (`git push origin my-new-feature`)
@@ -485,6 +485,8 @@ Tags: headers
485
485
 
486
486
  Aliases: no-duplicate-header
487
487
 
488
+ Parameters: allow_different_nesting (boolean; default false)
489
+
488
490
  This rule is triggered if there are multiple headers in the document that have
489
491
  the same text:
490
492
 
@@ -502,6 +504,21 @@ Rationale: Some markdown parses generate anchors for headers based on the
502
504
  header name, and having headers with the same content can cause problems with
503
505
  this.
504
506
 
507
+ If the parameter `allow_different_nesting` is set to `true`, header duplication
508
+ under different nesting is allowed, like it usually happens in change logs:
509
+
510
+ # Change log
511
+
512
+ ## 2.0.0
513
+
514
+ ### Bug fixes
515
+
516
+ ### Features
517
+
518
+ ## 1.0.0
519
+
520
+ ### Bug fixes
521
+
505
522
  ## MD025 - Multiple top level headers in the same document
506
523
 
507
524
  Tags: headers
@@ -856,6 +873,8 @@ is allowed.
856
873
 
857
874
  Tags: headers, emphasis
858
875
 
876
+ Parameters: punctuation (string; default ".,;:!?")
877
+
859
878
  Aliases: no-emphasis-as-header
860
879
 
861
880
  This check looks for instances where emphasized (i.e. bold or italic) text is
@@ -880,8 +899,11 @@ sections:
880
899
 
881
900
  Consectetur adipiscing elit, sed do eiusmod.
882
901
 
883
- Note: this rule looks for paragraphs that consist entirely of emphasized text.
884
- It won't fire on emphasis used within regular text.
902
+ Note: this rule looks for single line paragraphs that consist entirely of
903
+ emphasized text. It won't fire on emphasis used within regular text,
904
+ multi-line emphasized paragraphs, and paragraphs ending in punctuation.
905
+ Similarly to rule MD026, you can configure what characters are recognized as
906
+ punctuation.
885
907
 
886
908
  ## MD037 - Spaces inside emphasis markers
887
909
 
@@ -994,3 +1016,32 @@ To fix this, add a header to the top of your file:
994
1016
 
995
1017
  Note: The `level` parameter can be used to change the top level (ex: to h2) in
996
1018
  cases where an h1 is added externally.
1019
+
1020
+ ## MD046 - Code block style
1021
+
1022
+ Tags: code
1023
+
1024
+ Aliases: code-block-style
1025
+
1026
+ Parameters: style ("fenced", "indented", "consistent", default "fenced")
1027
+
1028
+ This rule is truggered what a different code block style is used than the
1029
+ configured one. For example, in the default configuration this triggers:
1030
+
1031
+ Some text.
1032
+
1033
+ Code block
1034
+
1035
+ Some more text.
1036
+
1037
+ To fix this, used fenced code blocks:
1038
+
1039
+ Some text.
1040
+
1041
+ ```ruby
1042
+ Code block
1043
+ ```
1044
+
1045
+ Some more text.
1046
+
1047
+ Or the reverse for the `indented` style.
@@ -21,7 +21,7 @@ Update the changelog:
21
21
 
22
22
  This goes at the bottom:
23
23
 
24
- [v0.2.0]: https://github.com/mivok/markdownlint/tree/v0.2.0
24
+ [v0.2.0]: https://github.com/markdownlint/markdownlint/tree/v0.2.0
25
25
 
26
26
  * Changelog entries can and should be added in an 'Unreleased' section as
27
27
  commits are made. However, the following steps can be performed before each
@@ -30,7 +30,7 @@ Update the changelog:
30
30
  * Use `git diff v0.1.0..v0.2.0 docs/RULES.md | grep '## MD'` to discover
31
31
  what these are.
32
32
  * Search for closed issues:
33
- * Go to <https://github.com/mivok/markdownlint/issues>
33
+ * Go to <https://github.com/markdownlint/markdownlint/issues>
34
34
  * Search for `closed:>1900-01-01`, changing the date to the date
35
35
  of the last release.
36
36
  * From this list of issues, make sections for:
data/lib/mdl.rb CHANGED
@@ -6,6 +6,7 @@ require 'mdl/ruleset'
6
6
  require 'mdl/style'
7
7
  require 'mdl/version'
8
8
 
9
+ require 'json'
9
10
  require 'kramdown'
10
11
 
11
12
  module MarkdownLint
@@ -69,6 +70,7 @@ module MarkdownLint
69
70
  cli.cli_arguments.flatten!
70
71
 
71
72
  status = 0
73
+ results = []
72
74
  cli.cli_arguments.each do |filename|
73
75
  puts "Checking #{filename}..." if Config[:verbose]
74
76
  doc = Doc.new_from_file(filename, Config[:ignore_front_matter])
@@ -86,7 +88,15 @@ module MarkdownLint
86
88
  status = 1
87
89
  error_lines.each do |line|
88
90
  line += doc.offset # Correct line numbers for any yaml front matter
89
- if Config[:show_aliases]
91
+ if Config[:json]
92
+ results << {
93
+ 'filename' => filename,
94
+ 'line' => line,
95
+ 'rule' => id,
96
+ 'aliases' => rule.aliases,
97
+ 'description' => rule.description,
98
+ }
99
+ elsif Config[:show_aliases]
90
100
  puts "#{filename}:#{line}: #{rule.aliases.first || id} #{rule.description}"
91
101
  else
92
102
  puts "#{filename}:#{line}: #{id} #{rule.description}"
@@ -94,6 +104,13 @@ module MarkdownLint
94
104
  end
95
105
  end
96
106
  end
107
+
108
+ if Config[:json]
109
+ puts JSON.generate(results)
110
+ elsif status != 0
111
+ puts "\nA detailed description of the rules is available at "\
112
+ "https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md"
113
+ end
97
114
  exit status
98
115
  end
99
116
  end
@@ -98,6 +98,12 @@ module MarkdownLint
98
98
  :proc => Proc.new { puts MarkdownLint::VERSION },
99
99
  :exit => 0
100
100
 
101
+ option :json,
102
+ :short => '-j',
103
+ :long => '--json',
104
+ :description => "JSON output",
105
+ :boolean => true
106
+
101
107
  def run(argv=ARGV)
102
108
  parse_options(argv)
103
109
 
@@ -246,7 +246,7 @@ module MarkdownLint
246
246
  # Extracts the text from an element whose children consist of text
247
247
  # elements and other things
248
248
 
249
- def extract_text(element, prefix="")
249
+ def extract_text(element, prefix="", restore_whitespace = true)
250
250
  quotes = {
251
251
  :rdquo => '"',
252
252
  :ldquo => '"',
@@ -260,7 +260,7 @@ module MarkdownLint
260
260
  if e.type == :text
261
261
  e.value
262
262
  elsif [:strong, :em, :p, :codespan].include?(e.type)
263
- extract_text(e, prefix).join("\n")
263
+ extract_text(e, prefix, restore_whitespace).join("\n")
264
264
  elsif e.type == :smart_quote
265
265
  quotes[e.value]
266
266
  end
@@ -268,7 +268,9 @@ module MarkdownLint
268
268
  # Text blocks have whitespace stripped, so we need to add it back in at
269
269
  # the beginning. Because this might be in something like a blockquote,
270
270
  # we optionally strip off a prefix given to the function.
271
- lines[0] = element_line(element).sub(prefix, "")
271
+ if restore_whitespace
272
+ lines[0] = element_line(element).sub(prefix, "")
273
+ end
272
274
  lines
273
275
  end
274
276
 
@@ -33,7 +33,7 @@ rule "MD003", "Header style" do
33
33
  # :style can be one of :consistent, :atx, :atx_closed, :setext
34
34
  params :style => :consistent
35
35
  check do |doc|
36
- headers = doc.find_type_elements(:header)
36
+ headers = doc.find_type_elements(:header, false)
37
37
  if headers.empty?
38
38
  nil
39
39
  else
@@ -257,7 +257,7 @@ rule "MD022", "Headers should be surrounded by blank lines" do
257
257
  aliases 'blanks-around-headers'
258
258
  check do |doc|
259
259
  errors = []
260
- doc.find_type_elements(:header).each do |h|
260
+ doc.find_type_elements(:header, false).each do |h|
261
261
  header_bad = false
262
262
  linenum = doc.element_linenumber(h)
263
263
  # Check previous line
@@ -303,7 +303,7 @@ rule "MD023", "Headers must start at the beginning of the line" do
303
303
  errors = []
304
304
  # The only type of header with spaces actually parsed as such is setext
305
305
  # style where only the text is indented. We check for that first.
306
- doc.find_type_elements(:header).each do |h|
306
+ doc.find_type_elements(:header, false).each do |h|
307
307
  errors << doc.element_linenumber(h) if doc.element_line(h).match(/^\s/)
308
308
  end
309
309
  # Next we have to look for things that aren't parsed as headers because
@@ -332,11 +332,42 @@ end
332
332
  rule "MD024", "Multiple headers with the same content" do
333
333
  tags :headers
334
334
  aliases 'no-duplicate-header'
335
+ params :allow_different_nesting => false
335
336
  check do |doc|
336
- header_content = Set.new
337
- doc.find_type(:header).select do |h|
338
- not header_content.add?(h[:raw_text])
339
- end.map { |h| doc.element_linenumber(h) }
337
+ headers = doc.find_type(:header)
338
+ allow_different_nesting = params[:allow_different_nesting]
339
+
340
+ duplicates = headers.select do |h|
341
+ headers.any? do |e|
342
+ e[:location] < h[:location] &&
343
+ e[:raw_text] == h[:raw_text] &&
344
+ (allow_different_nesting == false || e[:level] != h[:level])
345
+ end
346
+ end.to_set
347
+
348
+ if allow_different_nesting
349
+ same_nesting_duplicates = Set.new
350
+ stack = []
351
+ current_level = 0
352
+ doc.find_type(:header).each do |header|
353
+ level = header[:level]
354
+ text = header[:raw_text]
355
+
356
+ if current_level > level
357
+ stack.pop
358
+ elsif current_level < level
359
+ stack.push([text])
360
+ else
361
+ same_nesting_duplicates.add(header) if stack.last.include?(text)
362
+ end
363
+
364
+ current_level = level
365
+ end
366
+
367
+ duplicates += same_nesting_duplicates
368
+ end
369
+
370
+ duplicates.map { |h| doc.element_linenumber(h) }
340
371
  end
341
372
  end
342
373
 
@@ -345,7 +376,7 @@ rule "MD025", "Multiple top level headers in the same document" do
345
376
  aliases 'single-h1'
346
377
  params :level => 1
347
378
  check do |doc|
348
- headers = doc.find_type(:header).select { |h| h[:level] == params[:level] }
379
+ headers = doc.find_type(:header, false).select { |h| h[:level] == params[:level] }
349
380
  if not headers.empty? and doc.element_linenumber(headers[0]) == 1
350
381
  headers[1..-1].map { |h| doc.element_linenumber(h) }
351
382
  end
@@ -544,11 +575,20 @@ end
544
575
  rule "MD036", "Emphasis used instead of a header" do
545
576
  tags :headers, :emphasis
546
577
  aliases 'no-emphasis-as-header'
578
+ params :punctuation => '.,;:!?'
547
579
  check do |doc|
548
580
  # We are looking for a paragraph consisting entirely of emphasized
549
581
  # (italic/bold) text.
550
- doc.element_linenumbers(doc.find_type_elements(:p, false).select{|p|
551
- p.children.length == 1 && [:em, :strong].include?(p.children[0].type)})
582
+ errors = []
583
+ doc.find_type_elements(:p, false).each do |p|
584
+ next if p.children.length > 1
585
+ next unless [:em, :strong].include?(p.children[0].type)
586
+ lines = doc.extract_text(p.children[0], "", false)
587
+ next if lines.length > 1
588
+ next if lines[0].match(/[#{params[:punctuation]}]$/)
589
+ errors << doc.element_linenumber(p)
590
+ end
591
+ errors
552
592
  end
553
593
  end
554
594
 
@@ -579,10 +619,12 @@ rule "MD039", "Spaces inside link text" do
579
619
  tags :whitespace, :links
580
620
  aliases 'no-space-in-links'
581
621
  check do |doc|
582
- doc.element_linenumbers(doc.find_type_elements(:a).select{|e|
583
- e.children[0].type == :text and
584
- (e.children[0].value.start_with?(" ") or
585
- e.children[0].value.end_with?(" ")) })
622
+ doc.element_linenumbers(
623
+ doc.find_type_elements(:a).select{|e|
624
+ e.children[0].type == :text and (
625
+ e.children.first.value.start_with?(" ") or
626
+ e.children.last.value.end_with?(" "))}
627
+ )
586
628
  end
587
629
  end
588
630
 
@@ -608,3 +650,29 @@ rule "MD041", "First line in file should be a top level header" do
608
650
  or first_header[:level] != params[:level]
609
651
  end
610
652
  end
653
+
654
+ rule "MD046", "Code block style" do
655
+ tags :code
656
+ aliases 'code-block-style'
657
+ params :style => :fenced
658
+ check do |doc|
659
+ style = @params[:style]
660
+ doc.element_linenumbers(
661
+ doc.find_type_elements(:codeblock).select do |i|
662
+ # for consistent we determine the first one
663
+ if style == :consistent
664
+ if doc.element_line(i).start_with?(" ")
665
+ style = :indented
666
+ else
667
+ style = :fenced
668
+ end
669
+ end
670
+ if @params[:style] == :fenced
671
+ doc.element_line(i).start_with?(" ")
672
+ else
673
+ !doc.element_line(i).start_with?(" ")
674
+ end
675
+ end
676
+ )
677
+ end
678
+ end
@@ -7,7 +7,7 @@ module MarkdownLint
7
7
  @aliases = []
8
8
  @tags = []
9
9
  @params = {}
10
- instance_eval &block
10
+ instance_eval(&block)
11
11
  end
12
12
 
13
13
 
@@ -1,3 +1,3 @@
1
1
  module MarkdownLint
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["mark@mivok.net"]
11
11
  spec.summary = %q{Markdown lint tool}
12
12
  spec.description = %q{Style checker/lint tool for markdown files}
13
- spec.homepage = "http://github.com/mivok/markdownlint"
13
+ spec.homepage = "http://github.com/markdownlint/markdownlint"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -0,0 +1,11 @@
1
+ This is text.
2
+
3
+ This is a
4
+ code block.
5
+
6
+ And here is more text
7
+
8
+ ```
9
+ and here is a different {MD046:8}
10
+ code block
11
+ ```
@@ -0,0 +1 @@
1
+ rule 'MD046', :style => :consistent
@@ -0,0 +1,17 @@
1
+ This is text.
2
+
3
+ This is a {MD046}
4
+ code block.
5
+
6
+ And here is more text
7
+
8
+ ```
9
+ This is a code block that won't trigger.
10
+ ```
11
+
12
+ But we'll do another:
13
+
14
+ And this {MD046}
15
+ will.
16
+
17
+ Final text is here
@@ -0,0 +1 @@
1
+ rule 'MD046', :style => :fenced
@@ -0,0 +1,17 @@
1
+ This is text.
2
+
3
+ This is a
4
+ code block.
5
+
6
+ And here is more text
7
+
8
+ ```
9
+ This is {MD046:8} also a code block.
10
+ ```
11
+
12
+ But we'll do another:
13
+
14
+ And this
15
+ will.
16
+
17
+ Final text is here
@@ -0,0 +1 @@
1
+ rule 'MD046', :style => :indented
@@ -2,3 +2,4 @@
2
2
  all
3
3
 
4
4
  exclude_rule "MD041"
5
+ exclude_rule "MD046"
@@ -33,3 +33,8 @@ even though the emphasized text is on its own line.
33
33
 
34
34
  This is another **normal** paragraph with some text in it. This also should
35
35
  not trigger the rule.
36
+
37
+ **This is an entire paragraph that has been emphasized, and shouldn't be
38
+ detected as a header because it's on multiple lines**
39
+
40
+ **This also shouldn't be detected as a header as it ends in punctuation.**
@@ -0,0 +1,8 @@
1
+ [test _test_ test](www.test.com)
2
+ [test `test` test](www.test.com)
3
+ [test *test* test](www.test.com)
4
+ [test *test* *test* test](www.test.com)
5
+ [test *test* *test* *test* test](www.test.com)
6
+ [test **test** test](www.test.com)
7
+ [test __test__ test](www.test.com)
8
+ [this should not raise](www.shouldnotraise.com)
@@ -0,0 +1,11 @@
1
+ # Change log
2
+
3
+ ## 2.0.0
4
+
5
+ ### Bug fixes
6
+
7
+ ### Features
8
+
9
+ ## 1.0.0
10
+
11
+ ### Bug fixes
@@ -0,0 +1 @@
1
+ rule "MD024", :allow_different_nesting => true
@@ -0,0 +1,13 @@
1
+ # Change log
2
+
3
+ ## 2.0.0
4
+
5
+ ### Bug fixes
6
+
7
+ ### Features
8
+
9
+ ## 1.0.0
10
+
11
+ ### Bug fixes
12
+
13
+ {MD024:11}
@@ -0,0 +1,12 @@
1
+ # Heading 1
2
+
3
+ ## Heading 2
4
+
5
+ See the following issues:
6
+
7
+ * #1234
8
+ * #5678 (and related)
9
+ * #5678
10
+ * #9101
11
+
12
+ ## Heading 3
@@ -2,3 +2,4 @@ all
2
2
  rule "MD007", :indent => 4
3
3
  rule "MD030", :ul_multi => 3, :ol_multi => 2
4
4
  exclude_rule "MD041"
5
+ exclude_rule "MD046"
@@ -183,14 +183,21 @@ class TestCli < Minitest::Test
183
183
  def test_directory_scanning
184
184
  path = File.expand_path("./fixtures/dir_with_md_and_markdown", File.dirname(__FILE__))
185
185
  result = run_cli("#{path}")
186
- files_with_issues = result[:stdout].split("\n").map { |l| l.split(":")[0] }.sort
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
187
189
  assert_equal(files_with_issues, ["#{path}/bar.markdown", "#{path}/foo.md"])
188
190
  end
189
191
 
190
192
  def test_ignore_front_matter
191
193
  path = File.expand_path("./fixtures/front_matter", File.dirname(__FILE__))
192
194
  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")
195
+
196
+ expected = \
197
+ "#{path}/jekyll_post.md:16: MD001 Header levels should only increment by one level at a time"\
198
+ "\n\nA detailed description of the rules is available at https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md\n"
199
+
200
+ assert_equal(result[:stdout], expected)
194
201
  end
195
202
 
196
203
  private
@@ -0,0 +1,13 @@
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"]
@@ -0,0 +1,19 @@
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
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.0
4
+ version: 0.5.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-08-22 00:00:00.000000000 Z
11
+ date: 2018-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -181,8 +181,14 @@ files:
181
181
  - test/rule_tests/bulleted_list_2_space_indent_style.rb
182
182
  - test/rule_tests/bulleted_list_4_space_indent.md
183
183
  - test/rule_tests/bulleted_list_not_at_beginning_of_line.md
184
+ - test/rule_tests/code_block_consistency.md
185
+ - test/rule_tests/code_block_consistency_style.rb
184
186
  - test/rule_tests/code_block_dollar.md
185
187
  - test/rule_tests/code_block_dollar_fence.md
188
+ - test/rule_tests/code_block_fenced.md
189
+ - test/rule_tests/code_block_fenced_style.rb
190
+ - test/rule_tests/code_block_indented.md
191
+ - test/rule_tests/code_block_indented_style.rb
186
192
  - test/rule_tests/consecutive_blank_lines.md
187
193
  - test/rule_tests/consistent_bullet_styles_asterisk.md
188
194
  - test/rule_tests/consistent_bullet_styles_dash.md
@@ -202,7 +208,11 @@ files:
202
208
  - test/rule_tests/first_line_top_level_header_atx_style.rb
203
209
  - test/rule_tests/first_line_top_level_header_setext.md
204
210
  - test/rule_tests/first_line_top_level_header_setext_style.rb
211
+ - test/rule_tests/fix_102_extra_nodes_in_link_text.md
205
212
  - test/rule_tests/header_duplicate_content.md
213
+ - test/rule_tests/header_duplicate_content_different_nesting.md
214
+ - test/rule_tests/header_duplicate_content_different_nesting_style.rb
215
+ - test/rule_tests/header_duplicate_content_no_different_nesting.md
206
216
  - test/rule_tests/header_multiple_toplevel.md
207
217
  - test/rule_tests/header_mutliple_h1_no_toplevel.md
208
218
  - test/rule_tests/header_trailing_punctuation.md
@@ -212,6 +222,7 @@ files:
212
222
  - test/rule_tests/headers_good.md
213
223
  - test/rule_tests/headers_good_setext_with_atx.md
214
224
  - test/rule_tests/headers_good_setext_with_atx_style.rb
225
+ - test/rule_tests/headers_good_with_issue_numbers.md
215
226
  - test/rule_tests/headers_surrounding_space_atx.md
216
227
  - test/rule_tests/headers_surrounding_space_setext.md
217
228
  - test/rule_tests/headers_with_spaces_at_the_beginning.md
@@ -270,9 +281,11 @@ files:
270
281
  - test/test_ruledocs.rb
271
282
  - test/test_rules.rb
272
283
  - tools/README.md
284
+ - tools/docker/Dockerfile
285
+ - tools/docker/README.md
273
286
  - tools/test_location.rb
274
287
  - tools/view_markdown.rb
275
- homepage: http://github.com/mivok/markdownlint
288
+ homepage: http://github.com/markdownlint/markdownlint
276
289
  licenses:
277
290
  - MIT
278
291
  metadata: {}
@@ -292,7 +305,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
305
  version: '0'
293
306
  requirements: []
294
307
  rubyforge_project:
295
- rubygems_version: 2.5.1
308
+ rubygems_version: 2.7.6
296
309
  signing_key:
297
310
  specification_version: 4
298
311
  summary: Markdown lint tool
@@ -316,8 +329,14 @@ test_files:
316
329
  - test/rule_tests/bulleted_list_2_space_indent_style.rb
317
330
  - test/rule_tests/bulleted_list_4_space_indent.md
318
331
  - test/rule_tests/bulleted_list_not_at_beginning_of_line.md
332
+ - test/rule_tests/code_block_consistency.md
333
+ - test/rule_tests/code_block_consistency_style.rb
319
334
  - test/rule_tests/code_block_dollar.md
320
335
  - test/rule_tests/code_block_dollar_fence.md
336
+ - test/rule_tests/code_block_fenced.md
337
+ - test/rule_tests/code_block_fenced_style.rb
338
+ - test/rule_tests/code_block_indented.md
339
+ - test/rule_tests/code_block_indented_style.rb
321
340
  - test/rule_tests/consecutive_blank_lines.md
322
341
  - test/rule_tests/consistent_bullet_styles_asterisk.md
323
342
  - test/rule_tests/consistent_bullet_styles_dash.md
@@ -337,7 +356,11 @@ test_files:
337
356
  - test/rule_tests/first_line_top_level_header_atx_style.rb
338
357
  - test/rule_tests/first_line_top_level_header_setext.md
339
358
  - test/rule_tests/first_line_top_level_header_setext_style.rb
359
+ - test/rule_tests/fix_102_extra_nodes_in_link_text.md
340
360
  - test/rule_tests/header_duplicate_content.md
361
+ - test/rule_tests/header_duplicate_content_different_nesting.md
362
+ - test/rule_tests/header_duplicate_content_different_nesting_style.rb
363
+ - test/rule_tests/header_duplicate_content_no_different_nesting.md
341
364
  - test/rule_tests/header_multiple_toplevel.md
342
365
  - test/rule_tests/header_mutliple_h1_no_toplevel.md
343
366
  - test/rule_tests/header_trailing_punctuation.md
@@ -347,6 +370,7 @@ test_files:
347
370
  - test/rule_tests/headers_good.md
348
371
  - test/rule_tests/headers_good_setext_with_atx.md
349
372
  - test/rule_tests/headers_good_setext_with_atx_style.rb
373
+ - test/rule_tests/headers_good_with_issue_numbers.md
350
374
  - test/rule_tests/headers_surrounding_space_atx.md
351
375
  - test/rule_tests/headers_surrounding_space_setext.md
352
376
  - test/rule_tests/headers_with_spaces_at_the_beginning.md