mdl 0.11.0 → 0.12.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
2
  SHA256:
3
- metadata.gz: e82acf8008929f43d28c4be6a794f538d3745d1dd5acf37487ab061d0f968843
4
- data.tar.gz: c4f5b4b055ceb67dd29a0b292fe4c9ecf974ae3724a7db9c359196dafe60efe0
3
+ metadata.gz: 240bbb771676be213b572426ae6aa48dd810cb11769263a30ee1e2b98b6751d5
4
+ data.tar.gz: 0c474a99242d291a202b958294ba749977230b43b24a38342a00bc6675857d6b
5
5
  SHA512:
6
- metadata.gz: 6ed1202471b0bf2df640e0eaaacbfaf23593b3841ebc232ee630d15d4ae7817aedd6b455451612f0f4239762e0ddd6fe7acfa4efd9c61b72b14db87ab7dcce4a
7
- data.tar.gz: 3a8b7a23579bc6345fdec2d79442b238c6e32e2836602827ed626d105f9495b2ad000ac799d130ebe97815dca67f29b4e5ba6c21c8f816c1cf60bca0cf4c501a
6
+ metadata.gz: 538a08a57be028038bc8e1fe72c241e81e57261b84a0b58efb6875b515c8b0dfb01715826959778c6d88a9c6bb2b799b668a1662ac09e1a9d1c8a8a67817addd
7
+ data.tar.gz: 3104fb8e6bd66686b6268a5a5cb31f4bbdcef9fa7f7190f31b60a99c5acc489c47f19998c5bf40f9eff064c0f71cbeb73a8cb164a04899bb57666d041e85c125
data/lib/mdl/cli.rb CHANGED
@@ -145,10 +145,10 @@ module MarkdownLint
145
145
  end
146
146
 
147
147
  def self.toggle_list(parts, to_sym = false)
148
- parts = parts.split(',') if parts.class == String
149
- if parts.class == Array
148
+ parts = parts.split(',') if parts.instance_of?(String)
149
+ if parts.instance_of?(Array)
150
150
  inc = parts.reject { |p| p.start_with?('~') }
151
- exc = parts.select { |p| p.start_with?('~') }.map { |p| p[1..-1] }
151
+ exc = parts.select { |p| p.start_with?('~') }.map { |p| p[1..] }
152
152
  if to_sym
153
153
  inc.map!(&:to_sym)
154
154
  exc.map!(&:to_sym)
data/lib/mdl/doc.rb CHANGED
@@ -34,7 +34,9 @@ module MarkdownLint
34
34
  else
35
35
  @offset = 0
36
36
  end
37
- @lines = text.split(/\R/)
37
+ # The -1 is to cause split to preserve an extra entry in the array so we
38
+ # can tell if there's a final newline in the file or not.
39
+ @lines = text.split(/\R/, -1)
38
40
  @parsed = Kramdown::Document.new(text, :input => 'MarkdownLint')
39
41
  @elements = @parsed.root.children
40
42
  add_annotations(@elements)
@@ -78,7 +80,7 @@ module MarkdownLint
78
80
 
79
81
  def find_type_elements(type, nested = true, elements = @elements)
80
82
  results = []
81
- type = [type] if type.class == Symbol
83
+ type = [type] if type.instance_of?(Symbol)
82
84
  elements.each do |e|
83
85
  results.push(e) if type.include?(e.type)
84
86
  if nested && !e.children.empty?
@@ -102,8 +104,8 @@ module MarkdownLint
102
104
  type, nested_except = [], elements = @elements
103
105
  )
104
106
  results = []
105
- type = [type] if type.class == Symbol
106
- nested_except = [nested_except] if nested_except.class == Symbol
107
+ type = [type] if type.instance_of?(Symbol)
108
+ nested_except = [nested_except] if nested_except.instance_of?(Symbol)
107
109
  elements.each do |e|
108
110
  results.push(e) if type.include?(e.type)
109
111
  next if nested_except.include?(e.type) || e.children.empty?
@@ -230,7 +232,7 @@ module MarkdownLint
230
232
 
231
233
  lines = e.value.split("\n")
232
234
  lines.each_with_index do |l, i|
233
- matches << first_line + i if regex.match(l)
235
+ matches << (first_line + i) if regex.match(l)
234
236
  end
235
237
  end
236
238
  matches
data/lib/mdl/rules.rb CHANGED
@@ -1,3 +1,9 @@
1
+ docs do |id, description|
2
+ url_hash = [id.downcase,
3
+ description.downcase.gsub(/[^a-z]+/, '-')].join('---')
4
+ "https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md##{url_hash}"
5
+ end
6
+
1
7
  rule 'MD001', 'Header levels should only increment by one level at a time' do
2
8
  tags :headers
3
9
  aliases 'header-increment'
@@ -62,7 +68,7 @@ end
62
68
  rule 'MD004', 'Unordered list style' do
63
69
  tags :bullet, :ul
64
70
  aliases 'ul-style'
65
- # :style can be one of :consistent, :asterisk, :plus, :dash
71
+ # :style can be one of :consistent, :asterisk, :plus, :dash, :sublist
66
72
  params :style => :consistent
67
73
  check do |doc|
68
74
  bullets = doc.find_type_elements(:ul).map do |l|
@@ -71,15 +77,30 @@ rule 'MD004', 'Unordered list style' do
71
77
  if bullets.empty?
72
78
  nil
73
79
  else
74
- doc_style = if @params[:style] == :consistent
80
+ doc_style = case @params[:style]
81
+ when :consistent
75
82
  doc.list_style(bullets.first)
83
+ when :sublist
84
+ {}
76
85
  else
77
86
  @params[:style]
78
87
  end
79
- bullets.map do |b|
80
- doc.element_linenumber(b) \
81
- if doc.list_style(b) != doc_style
82
- end.compact
88
+ results = []
89
+ bullets.each do |b|
90
+ if @params[:style] == :sublist
91
+ level = b.options[:element_level]
92
+ if doc_style[level]
93
+ if doc_style[level] != doc.list_style(b)
94
+ results << doc.element_linenumber(b)
95
+ end
96
+ else
97
+ doc_style[level] = doc.list_style(b)
98
+ end
99
+ elsif doc.list_style(b) != doc_style
100
+ results << doc.element_linenumber(b)
101
+ end
102
+ end
103
+ results.compact
83
104
  end
84
105
  end
85
106
  end
@@ -119,7 +140,8 @@ end
119
140
  rule 'MD007', 'Unordered list indentation' do
120
141
  tags :bullet, :ul, :indentation
121
142
  aliases 'ul-indent'
122
- params :indent => 2
143
+ # Do not default to < 3, see PR#373 or the comments in RULES.md
144
+ params :indent => 3
123
145
  check do |doc|
124
146
  errors = []
125
147
  indents = doc.find_type(:ul).map do |e|
@@ -152,8 +174,20 @@ end
152
174
  rule 'MD010', 'Hard tabs' do
153
175
  tags :whitespace, :hard_tab
154
176
  aliases 'no-hard-tabs'
177
+ params :ignore_code_blocks => false
155
178
  check do |doc|
156
- doc.matching_lines(/\t/)
179
+ # Every line in the document that is part of a code block. Blank lines
180
+ # inside of a code block are acceptable.
181
+ codeblock_lines = doc.find_type_elements(:codeblock).map do |e|
182
+ (doc.element_linenumber(e)..
183
+ doc.element_linenumber(e) + e.value.lines.count).to_a
184
+ end.flatten
185
+
186
+ # Check for lines with hard tab
187
+ hard_tab_lines = doc.matching_lines(/\t/)
188
+ # Remove lines with hard tabs, if they stem from codeblock
189
+ hard_tab_lines -= codeblock_lines if params[:ignore_code_blocks]
190
+ hard_tab_lines
157
191
  end
158
192
  end
159
193
 
@@ -186,7 +220,9 @@ end
186
220
  rule 'MD013', 'Line length' do
187
221
  tags :line_length
188
222
  aliases 'line-length'
189
- params :line_length => 80, :code_blocks => true, :tables => true
223
+ params :line_length => 80, :ignore_code_blocks => false, :code_blocks => true,
224
+ :tables => true
225
+
190
226
  check do |doc|
191
227
  # Every line in the document that is part of a code block.
192
228
  codeblock_lines = doc.find_type_elements(:codeblock).map do |e|
@@ -207,7 +243,14 @@ rule 'MD013', 'Line length' do
207
243
  end
208
244
  end.flatten
209
245
  overlines = doc.matching_lines(/^.{#{@params[:line_length]}}.*\s/)
210
- overlines -= codeblock_lines unless params[:code_blocks]
246
+ if !params[:code_blocks] || params[:ignore_code_blocks]
247
+ overlines -= codeblock_lines
248
+ unless params[:code_blocks]
249
+ warn 'MD013 warning: Parameter :code_blocks is deprecated.'
250
+ warn ' Please replace \":code_blocks => false\" by '\
251
+ '\":ignore_code_blocks => true\" in your configuration.'
252
+ end
253
+ end
211
254
  overlines -= table_lines unless params[:tables]
212
255
  overlines
213
256
  end
@@ -218,7 +261,7 @@ rule 'MD014', 'Dollar signs used before commands without showing output' do
218
261
  aliases 'commands-show-output'
219
262
  check do |doc|
220
263
  doc.find_type_elements(:codeblock).select do |e|
221
- !e.value.empty? and
264
+ !e.value.empty? &&
222
265
  !e.value.split(/\n+/).map { |l| l.match(/^\$\s/) }.include?(nil)
223
266
  end.map { |e| doc.element_linenumber(e) }
224
267
  end
@@ -229,7 +272,7 @@ rule 'MD018', 'No space after hash on atx style header' do
229
272
  aliases 'no-missing-space-atx'
230
273
  check do |doc|
231
274
  doc.find_type_elements(:header).select do |h|
232
- doc.header_style(h) == :atx and doc.element_line(h).match(/^#+[^#\s]/)
275
+ doc.header_style(h) == :atx && doc.element_line(h).match(/^#+[^#\s]/)
233
276
  end.map { |h| doc.element_linenumber(h) }
234
277
  end
235
278
  end
@@ -239,7 +282,7 @@ rule 'MD019', 'Multiple spaces after hash on atx style header' do
239
282
  aliases 'no-multiple-space-atx'
240
283
  check do |doc|
241
284
  doc.find_type_elements(:header).select do |h|
242
- doc.header_style(h) == :atx and doc.element_line(h).match(/^#+\s\s/)
285
+ doc.header_style(h) == :atx && doc.element_line(h).match(/^#+\s\s/)
243
286
  end.map { |h| doc.element_linenumber(h) }
244
287
  end
245
288
  end
@@ -250,8 +293,8 @@ rule 'MD020', 'No space inside hashes on closed atx style header' do
250
293
  check do |doc|
251
294
  doc.find_type_elements(:header).select do |h|
252
295
  doc.header_style(h) == :atx_closed \
253
- and (doc.element_line(h).match(/^#+[^#\s]/) \
254
- or doc.element_line(h).match(/[^#\s\\]#+$/))
296
+ && (doc.element_line(h).match(/^#+[^#\s]/) \
297
+ || doc.element_line(h).match(/[^#\s\\]#+$/))
255
298
  end.map { |h| doc.element_linenumber(h) }
256
299
  end
257
300
  end
@@ -262,8 +305,8 @@ rule 'MD021', 'Multiple spaces inside hashes on closed atx style header' do
262
305
  check do |doc|
263
306
  doc.find_type_elements(:header).select do |h|
264
307
  doc.header_style(h) == :atx_closed \
265
- and (doc.element_line(h).match(/^#+\s\s/) \
266
- or doc.element_line(h).match(/\s\s#+$/))
308
+ && (doc.element_line(h).match(/^#+\s\s/) \
309
+ || doc.element_line(h).match(/\s\s#+$/))
267
310
  end.map { |h| doc.element_linenumber(h) }
268
311
  end
269
312
  end
@@ -297,7 +340,7 @@ rule 'MD022', 'Headers should be surrounded by blank lines' do
297
340
  errors << linenum if line.match(/^\#{1,6}/) && !prev_lines[1].empty?
298
341
  # Next, look for setext style
299
342
  if line.match(/^(-+|=+)\s*$/) && !prev_lines[0].empty?
300
- errors << linenum - 1
343
+ errors << (linenum - 1)
301
344
  end
302
345
  linenum += 1
303
346
  prev_lines << line
@@ -329,7 +372,7 @@ rule 'MD023', 'Headers must start at the beginning of the line' do
329
372
  errors << linenum if line.match(/^\s+\#{1,6}/)
330
373
  # Next, look for setext style
331
374
  if line.match(/^\s+(-+|=+)\s*$/) && !prev_line.empty?
332
- errors << linenum - 1
375
+ errors << (linenum - 1)
333
376
  end
334
377
  linenum += 1
335
378
  prev_line = line
@@ -390,7 +433,7 @@ rule 'MD025', 'Multiple top level headers in the same document' do
390
433
  h[:level] == params[:level]
391
434
  end
392
435
  if !headers.empty? && (doc.element_linenumber(headers[0]) == 1)
393
- headers[1..-1].map { |h| doc.element_linenumber(h) }
436
+ headers[1..].map { |h| doc.element_linenumber(h) }
394
437
  end
395
438
  end
396
439
  end
@@ -438,7 +481,7 @@ rule 'MD028', 'Blank line inside blockquote' do
438
481
  # The current location is the start of the second blockquote, so the
439
482
  # line before will be a blank line in between the two, or at least the
440
483
  # lowest blank line if there are more than one.
441
- errors << e.options[:location] - 1
484
+ errors << (e.options[:location] - 1)
442
485
  end
443
486
  check_blockquote(errors, e.children)
444
487
  end
@@ -490,8 +533,13 @@ rule 'MD030', 'Spaces after list markers' do
490
533
  # the items in it have multiple paragraphs/other block items.
491
534
  srule = items.map { |i| i.children.length }.max > 1 ? 'multi' : 'single'
492
535
  items.each do |i|
493
- actual_spaces = doc.element_line(i).gsub(/^> /, '')
494
- .match(/^\s*\S+(\s+)/)[1].length
536
+ line = doc.element_line(i)
537
+ # See #278 - sometimes we think non-printable characters are list
538
+ # items even if they are not, so this ignore those and prevents
539
+ # us from crashing
540
+ next if line.empty?
541
+
542
+ actual_spaces = line.gsub(/^> /, '').match(/^\s*\S+(\s+)/)[1].length
495
543
  required_spaces = params["#{list_type}_#{srule}".to_sym]
496
544
  errors << doc.element_linenumber(i) if required_spaces != actual_spaces
497
545
  end
@@ -548,7 +596,7 @@ rule 'MD032', 'Lists should be surrounded by blank lines' do
548
596
  unless in_code
549
597
  list_marker = line.strip.match(/^([*+\-]|(\d+\.))\s/)
550
598
  if list_marker && !in_list && !prev_line.match(/^($|\s)/)
551
- errors << linenum + 1
599
+ errors << (linenum + 1)
552
600
  elsif !list_marker && in_list && !line.match(/^($|\s)/)
553
601
  errors << linenum
554
602
  end
@@ -648,7 +696,7 @@ rule 'MD038', 'Spaces inside code span elements' do
648
696
  # block that happen to be parsed as code spans.
649
697
  doc.element_linenumbers(
650
698
  doc.find_type_elements(:codespan).select do |i|
651
- i.value.match(/(^\s|\s$)/) and !i.value.include?("\n")
699
+ i.value.match(/(^\s|\s$)/) && !i.value.include?("\n")
652
700
  end,
653
701
  )
654
702
  end
@@ -660,8 +708,8 @@ rule 'MD039', 'Spaces inside link text' do
660
708
  check do |doc|
661
709
  doc.element_linenumbers(
662
710
  doc.find_type_elements(:a).reject { |e| e.children.empty? }.select do |e|
663
- e.children.first.type == :text && e.children.last.type == :text and (
664
- e.children.first.value.start_with?(' ') or
711
+ e.children.first.type == :text && e.children.last.type == :text && (
712
+ e.children.first.value.start_with?(' ') ||
665
713
  e.children.last.value.end_with?(' '))
666
714
  end,
667
715
  )
@@ -675,7 +723,7 @@ rule 'MD040', 'Fenced code blocks should have a language specified' do
675
723
  # Kramdown parses code blocks with language settings as code blocks with
676
724
  # the class attribute set to language-languagename.
677
725
  doc.element_linenumbers(doc.find_type_elements(:codeblock).select do |i|
678
- !i.attr['class'].to_s.start_with?('language-') and
726
+ !i.attr['class'].to_s.start_with?('language-') &&
679
727
  !doc.element_line(i).start_with?(' ')
680
728
  end)
681
729
  end
@@ -731,3 +779,14 @@ rule 'MD046', 'Code block style' do
731
779
  )
732
780
  end
733
781
  end
782
+
783
+ rule 'MD047', 'File should end with a single newline character' do
784
+ tags :blank_lines
785
+ aliases 'single-trailing-newline'
786
+ check do |doc|
787
+ error_lines = []
788
+ last_line = doc.lines[-1]
789
+ error_lines.push(doc.lines.length) unless last_line.nil? || last_line.empty?
790
+ error_lines
791
+ end
792
+ end
data/lib/mdl/ruleset.rb CHANGED
@@ -3,9 +3,11 @@ module MarkdownLint
3
3
  class Rule
4
4
  attr_accessor :id, :description
5
5
 
6
- def initialize(id, description, block)
6
+ def initialize(id, description, fallback_docs: nil, &block)
7
7
  @id = id
8
8
  @description = description
9
+ @generate_docs = fallback_docs
10
+ @docs_overridden = false
9
11
  @aliases = []
10
12
  @tags = []
11
13
  @params = {}
@@ -31,6 +33,21 @@ module MarkdownLint
31
33
  @params.update(params) unless params.nil?
32
34
  @params
33
35
  end
36
+
37
+ def docs(url = nil, &block)
38
+ if block_given? != url.nil?
39
+ raise ArgumentError, 'Give either a URL or a block, not both'
40
+ end
41
+
42
+ raise 'A docs url is already set within this rule' if @docs_overridden
43
+
44
+ @generate_docs = block_given? ? block : lambda { |_, _| url }
45
+ @docs_overridden = true
46
+ end
47
+
48
+ def docs_url
49
+ @generate_docs&.call(id, description)
50
+ end
34
51
  end
35
52
 
36
53
  # defines a ruleset
@@ -42,7 +59,8 @@ module MarkdownLint
42
59
  end
43
60
 
44
61
  def rule(id, description, &block)
45
- @rules[id] = Rule.new(id, description, block)
62
+ @rules[id] =
63
+ Rule.new(id, description, :fallback_docs => @fallback_docs, &block)
46
64
  end
47
65
 
48
66
  def load(rules_file)
@@ -50,6 +68,14 @@ module MarkdownLint
50
68
  @rules
51
69
  end
52
70
 
71
+ def docs(url = nil, &block)
72
+ if block_given? != url.nil?
73
+ raise ArgumentError, 'Give either a URL or a block, not both'
74
+ end
75
+
76
+ @fallback_docs = block_given? ? block : lambda { |_, _| url }
77
+ end
78
+
53
79
  def load_default
54
80
  load(File.expand_path('rules.rb', __dir__))
55
81
  end
@@ -9,3 +9,7 @@ rule 'MD035', :style => '---'
9
9
  # Inline HTML - this isn't forbidden by the style guide, and raw HTML use is
10
10
  # explicitly mentioned in the 'email automatic links' section.
11
11
  exclude_rule 'MD033'
12
+
13
+ # File should end with a single newline character
14
+ # this isn't forbidden by the style guide
15
+ exclude_rule 'MD047'
@@ -8,3 +8,4 @@ exclude_rule 'MD033' # Inline HTML
8
8
  exclude_rule 'MD034' # Bare URL used
9
9
  exclude_rule 'MD040' # Fenced code blocks should have a language specified
10
10
  exclude_rule 'MD041' # First line in file should be a top level header
11
+ exclude_rule 'MD047' # File should end with a single newline character
data/lib/mdl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MarkdownLint
2
- VERSION = '0.11.0'.freeze
2
+ VERSION = '0.12.0'.freeze
3
3
  end
data/lib/mdl.rb CHANGED
@@ -66,7 +66,8 @@ module MarkdownLint
66
66
  Dir.chdir(filename) do
67
67
  cli.cli_arguments[i] =
68
68
  Mixlib::ShellOut.new("git ls-files '*.md' '*.markdown'")
69
- .run_command.stdout.lines.map(&:strip)
69
+ .run_command.stdout.lines
70
+ .map { |m| File.join(filename, m.strip) }
70
71
  end
71
72
  else
72
73
  cli.cli_arguments[i] = Dir["#{filename}/**/*.{md,markdown}"]
@@ -77,8 +78,15 @@ module MarkdownLint
77
78
 
78
79
  status = 0
79
80
  results = []
81
+ docs_to_print = []
80
82
  cli.cli_arguments.each do |filename|
81
83
  puts "Checking #{filename}..." if Config[:verbose]
84
+ unless filename == '-' || File.exist?(filename)
85
+ warn(
86
+ "#{Errno::ENOENT}: No such file or directory - #{filename}",
87
+ )
88
+ exit 3
89
+ end
82
90
  doc = Doc.new_from_file(filename, Config[:ignore_front_matter])
83
91
  filename = '(stdin)' if filename == '-'
84
92
  if Config[:show_kramdown_warnings]
@@ -102,24 +110,47 @@ module MarkdownLint
102
110
  'rule' => id,
103
111
  'aliases' => rule.aliases,
104
112
  'description' => rule.description,
113
+ 'docs' => rule.docs_url,
105
114
  }
106
- elsif Config[:show_aliases]
107
- puts "#{filename}:#{line}: #{rule.aliases.first || id} " +
108
- rule.description.to_s
109
115
  else
110
- puts "#{filename}:#{line}: #{id} #{rule.description}"
116
+ linked_id = linkify(printable_id(rule), rule.docs_url)
117
+ puts "#{filename}:#{line}: #{linked_id} " + rule.description.to_s
111
118
  end
112
119
  end
120
+
121
+ # If we're not in JSON mode (URLs are in the object), and we cannot
122
+ # make real links (checking if we have a TTY is an OK heuristic for
123
+ # that) then, instead of making the output ugly with long URLs, we
124
+ # print them at the end. And of course we only want to print each URL
125
+ # once.
126
+ if !Config[:json] && !$stdout.tty? && !docs_to_print.include?(rule)
127
+ docs_to_print << rule
128
+ end
113
129
  end
114
130
  end
115
131
 
116
132
  if Config[:json]
117
133
  require 'json'
118
134
  puts JSON.generate(results)
119
- elsif status != 0
120
- puts "\nA detailed description of the rules is available at " +
121
- 'https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md'
135
+ elsif docs_to_print.any?
136
+ puts "\nFurther documentation is available for these failures:"
137
+ docs_to_print.each do |rule|
138
+ puts " - #{printable_id(rule)}: #{rule.docs_url}"
139
+ end
122
140
  end
123
141
  exit status
124
142
  end
143
+
144
+ def self.printable_id(rule)
145
+ return rule.aliases.first if Config[:show_aliases] && rule.aliases.any?
146
+
147
+ rule.id
148
+ end
149
+
150
+ # Creates hyperlinks in terminal emulators, if available: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda
151
+ def self.linkify(text, url)
152
+ return text unless $stdout.tty? && url
153
+
154
+ "\e]8;;#{url}\e\\#{text}\e]8;;\e\\"
155
+ end
125
156
  end
data/mdl.gemspec CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.description = 'Style checker/lint tool for markdown files'
12
12
  spec.homepage = 'http://github.com/markdownlint/markdownlint'
13
13
  spec.license = 'MIT'
14
+ spec.metadata['rubygems_mfa_required'] = 'true'
14
15
 
15
16
  spec.files = %w{LICENSE.txt Gemfile} + Dir.glob('*.gemspec') +
16
17
  Dir.glob('lib/**/*')
@@ -18,7 +19,7 @@ Gem::Specification.new do |spec|
18
19
  spec.executables = %w{mdl}
19
20
  spec.require_paths = ['lib']
20
21
 
21
- spec.required_ruby_version = '>= 2.4'
22
+ spec.required_ruby_version = '>= 2.7'
22
23
 
23
24
  spec.add_dependency 'kramdown', '~> 2.3'
24
25
  spec.add_dependency 'kramdown-parser-gfm', '~> 1.1'
@@ -30,5 +31,5 @@ Gem::Specification.new do |spec|
30
31
  spec.add_development_dependency 'minitest', '~> 5.9'
31
32
  spec.add_development_dependency 'pry', '~> 0.10'
32
33
  spec.add_development_dependency 'rake', '>= 11.2', '< 14'
33
- spec.add_development_dependency 'rubocop', '>= 0.49.0'
34
+ spec.add_development_dependency 'rubocop', '~> 1.28.1'
34
35
  end
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.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Harrison
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-23 00:00:00.000000000 Z
11
+ date: 2022-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -164,16 +164,16 @@ dependencies:
164
164
  name: rubocop
165
165
  requirement: !ruby/object:Gem::Requirement
166
166
  requirements:
167
- - - ">="
167
+ - - "~>"
168
168
  - !ruby/object:Gem::Version
169
- version: 0.49.0
169
+ version: 1.28.1
170
170
  type: :development
171
171
  prerelease: false
172
172
  version_requirements: !ruby/object:Gem::Requirement
173
173
  requirements:
174
- - - ">="
174
+ - - "~>"
175
175
  - !ruby/object:Gem::Version
176
- version: 0.49.0
176
+ version: 1.28.1
177
177
  description: Style checker/lint tool for markdown files
178
178
  email:
179
179
  - mark@mivok.net
@@ -202,8 +202,9 @@ files:
202
202
  homepage: http://github.com/markdownlint/markdownlint
203
203
  licenses:
204
204
  - MIT
205
- metadata: {}
206
- post_install_message:
205
+ metadata:
206
+ rubygems_mfa_required: 'true'
207
+ post_install_message:
207
208
  rdoc_options: []
208
209
  require_paths:
209
210
  - lib
@@ -211,15 +212,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
211
212
  requirements:
212
213
  - - ">="
213
214
  - !ruby/object:Gem::Version
214
- version: '2.4'
215
+ version: '2.7'
215
216
  required_rubygems_version: !ruby/object:Gem::Requirement
216
217
  requirements:
217
218
  - - ">="
218
219
  - !ruby/object:Gem::Version
219
220
  version: '0'
220
221
  requirements: []
221
- rubygems_version: 3.1.2
222
- signing_key:
222
+ rubygems_version: 3.3.7
223
+ signing_key:
223
224
  specification_version: 4
224
225
  summary: Markdown lint tool
225
226
  test_files: []