mdl 0.13.0 → 0.15.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb98b688ab9d9dc7bac3c169f20fefc7c0cb27ce5bf574bec52053d592b7a9c7
4
- data.tar.gz: 873df51b4011d23617c1d73ab47a1928765fee0502b6f58853e2932bb3d5ec59
3
+ metadata.gz: 0b0bf6bf60ca7328cdc7b7c979b1c7f9eea59f99c35a219da0eddf8c73e529cc
4
+ data.tar.gz: 954a6871342a9137babebe806cab333bbf883d835cdc1ff867731145fb52d85f
5
5
  SHA512:
6
- metadata.gz: fea533cf2d4a61c4da291a094e3f94080acee8837919935e789e1b39c98d8bcc416cb9fcb143a10a1f63738ee993d3fe5ce89ca3dc664a9a11712796db8dbc4d
7
- data.tar.gz: 8dc7470f981b1267dddb1f668afc4f85c742d6c467ae9a31bcaf24618792d6d9c7792a328ff3258d8efd071d9592b4a84600a2825e787b26d1cb5f7e979989af
6
+ metadata.gz: 987343bbcf9c9a260e205970c1ea1bba1c5eb8dc5e0d2f3ed03013126efdf58a65085275f24081019d27fe63c02ce0ebbe0dded59e265392833f19cd00b582dd
7
+ data.tar.gz: aa09c154c250f31e0f0ad9cefc8b1e243562a836c9d2c1d740aa7d5d20eac38ea91f56dd73c7a6d1d8aa5ab57b0ba41143013372a65eb208411d3b8ebe4b53bf
data/Gemfile CHANGED
@@ -1,2 +1,11 @@
1
- source 'https://rubygems.org'
1
+ source 'https://gem.coop'
2
2
  gemspec
3
+
4
+ group :development, :test do
5
+ gem 'base64'
6
+ gem 'bundler', '>= 1.12', '< 3'
7
+ gem 'minitest', '~> 5.26', '>= 5.26.2'
8
+ gem 'pry', '~> 0.15.2'
9
+ gem 'rake', '~> 13.3', '>= 13.3.1'
10
+ gem 'rubocop', '~> 1.81'
11
+ end
data/lib/mdl/doc.rb CHANGED
@@ -282,7 +282,7 @@ module MarkdownLint
282
282
  # returned and we'll just not catch that part of the text, which seems
283
283
  # like a sensible failure mode.
284
284
  element.children.map do |e|
285
- if e.type == :text || e.type == :codespan
285
+ if %i{text codespan}.include?(e.type)
286
286
  e.value
287
287
  elsif %i{strong em p a}.include?(e.type)
288
288
  extract_as_text(e).join("\n")
@@ -8,7 +8,7 @@ module MarkdownLint
8
8
  class << self
9
9
  def generate(rules, results)
10
10
  matched_rules_id = results.map { |result| result['rule'] }.uniq
11
- matched_rules = rules.select { |id, _| matched_rules_id.include?(id) }
11
+ matched_rules = rules.slice(*matched_rules_id)
12
12
  JSON.generate(generate_sarif(matched_rules, results))
13
13
  end
14
14
 
data/lib/mdl/rules.rb CHANGED
@@ -51,8 +51,8 @@ rule 'MD003', 'Header style' do
51
51
  if doc_style == :setext_with_atx
52
52
  headers.map do |h|
53
53
  doc.element_linenumber(h) \
54
- unless (doc.header_style(h) == :setext) || \
55
- ((doc.header_style(h) == :atx) && \
54
+ unless (doc.header_style(h) == :setext) ||
55
+ ((doc.header_style(h) == :atx) &&
56
56
  (h.options[:level] > 2))
57
57
  end.compact
58
58
  else
@@ -180,7 +180,7 @@ rule 'MD010', 'Hard tabs' do
180
180
  # inside of a code block are acceptable.
181
181
  codeblock_lines = doc.find_type_elements(:codeblock).map do |e|
182
182
  (doc.element_linenumber(e)..
183
- doc.element_linenumber(e) + e.value.lines.count).to_a
183
+ (doc.element_linenumber(e) + e.value.lines.count)).to_a
184
184
  end.flatten
185
185
 
186
186
  # Check for lines with hard tab
@@ -207,7 +207,7 @@ rule 'MD012', 'Multiple consecutive blank lines' do
207
207
  # inside of a code block are acceptable.
208
208
  codeblock_lines = doc.find_type_elements(:codeblock).map do |e|
209
209
  (doc.element_linenumber(e)..
210
- doc.element_linenumber(e) + e.value.lines.count).to_a
210
+ (doc.element_linenumber(e) + e.value.lines.count)).to_a
211
211
  end.flatten
212
212
  blank_lines = doc.matching_lines(/^\s*$/)
213
213
  cons_blank_lines = blank_lines.each_cons(2).select do |p, n|
@@ -227,7 +227,7 @@ rule 'MD013', 'Line length' do
227
227
  # Every line in the document that is part of a code block.
228
228
  codeblock_lines = doc.find_type_elements(:codeblock).map do |e|
229
229
  (doc.element_linenumber(e)..
230
- doc.element_linenumber(e) + e.value.lines.count).to_a
230
+ (doc.element_linenumber(e) + e.value.lines.count)).to_a
231
231
  end.flatten
232
232
  # Every line in the document that is part of a table.
233
233
  locations = doc.elements
@@ -236,7 +236,7 @@ rule 'MD013', 'Line length' do
236
236
  table_lines = locations.map.with_index do |(l, e), i|
237
237
  if e.type == :table
238
238
  if i + 1 < locations.size
239
- (l..locations[i + 1].first - 1).to_a
239
+ (l..(locations[i + 1].first - 1)).to_a
240
240
  else
241
241
  (l..doc.lines.count).to_a
242
242
  end
@@ -247,7 +247,7 @@ rule 'MD013', 'Line length' do
247
247
  overlines -= codeblock_lines
248
248
  unless params[:code_blocks]
249
249
  warn 'MD013 warning: Parameter :code_blocks is deprecated.'
250
- warn ' Please replace \":code_blocks => false\" by '\
250
+ warn ' Please replace \":code_blocks => false\" by ' \
251
251
  '\":ignore_code_blocks => true\" in your configuration.'
252
252
  end
253
253
  end
@@ -543,7 +543,7 @@ rule 'MD030', 'Spaces after list markers' do
543
543
  next if line.empty?
544
544
 
545
545
  actual_spaces = line.gsub(/^> /, '').match(/^\s*\S+(\s+)/)[1].length
546
- required_spaces = params["#{list_type}_#{srule}".to_sym]
546
+ required_spaces = params[:"#{list_type}_#{srule}"]
547
547
  errors << doc.element_linenumber(i) if required_spaces != actual_spaces
548
548
  end
549
549
  end
@@ -597,7 +597,7 @@ rule 'MD032', 'Lists should be surrounded by blank lines' do
597
597
  next if line.strip == '{:toc}'
598
598
 
599
599
  unless in_code
600
- list_marker = line.strip.match(/^([*+\-]|(\d+\.))\s/)
600
+ list_marker = line.strip.match(/^([*+-]|(\d+\.))\s/)
601
601
  if list_marker && !in_list && !prev_line.match(/^($|\s)/)
602
602
  errors << (linenum + 1)
603
603
  elsif !list_marker && in_list && !line.match(/^($|\s)/)
@@ -692,7 +692,7 @@ rule 'MD037', 'Spaces inside emphasis markers' do
692
692
  # Kramdown doesn't parse emphasis with spaces, which means we can just
693
693
  # look for emphasis patterns inside regular text with spaces just inside
694
694
  # them.
695
- (doc.matching_text_element_lines(/\s(\*\*?|__?)\s.+\1/) | \
695
+ (doc.matching_text_element_lines(/\s(\*\*?|__?)\s.+\1/) |
696
696
  doc.matching_text_element_lines(/(\*\*?|__?).+\s\1\s/)).sort
697
697
  end
698
698
  end
@@ -799,92 +799,3 @@ rule 'MD047', 'File should end with a single newline character' do
799
799
  error_lines
800
800
  end
801
801
  end
802
-
803
- rule 'MD055', 'Table row doesn\'t begin/end with pipes' do
804
- tags :tables
805
- aliases 'table-rows-start-and-end-with-pipes'
806
- check do |doc|
807
- error_lines = []
808
- tables = doc.find_type_elements(:table)
809
- lines = doc.lines
810
-
811
- tables.each do |table|
812
- table_pos = table.options[:location] - 1
813
- table_rows = get_table_rows(lines, table_pos)
814
-
815
- table_rows.each_with_index do |line, index|
816
- if line.length < 2 || line[0] != '|' || line[-1] != '|'
817
- error_lines << (table_pos + index + 1)
818
- end
819
- end
820
- end
821
-
822
- error_lines
823
- end
824
- end
825
-
826
- rule 'MD056', 'Table has inconsistent number of columns' do
827
- tags :tables
828
- aliases 'inconsistent-columns-in-table'
829
- check do |doc|
830
- error_lines = []
831
- tables = doc.find_type_elements(:table)
832
- lines = doc.lines
833
-
834
- tables.each do |table|
835
- table_pos = table.options[:location] - 1
836
- table_rows = get_table_rows(lines, table_pos)
837
-
838
- num_headings = number_of_columns_in_a_table_row(lines[table_pos])
839
-
840
- table_rows.each_with_index do |line, index|
841
- if number_of_columns_in_a_table_row(line) != num_headings
842
- error_lines << (table_pos + index + 1)
843
- end
844
- end
845
- end
846
-
847
- error_lines
848
- end
849
- end
850
-
851
- rule 'MD057', 'Table has missing or invalid header separation (second row)' do
852
- tags :tables
853
- aliases 'table-invalid-second-row'
854
- check do |doc|
855
- error_lines = []
856
- tables = doc.find_type_elements(:table)
857
- lines = doc.lines
858
-
859
- tables.each do |table|
860
- second_row = ''
861
-
862
- # line number of table start (1-indexed)
863
- # which is equal to second row's index (0-indexed)
864
- line_num = table.options[:location]
865
- second_row = lines[line_num] if line_num < lines.length
866
-
867
- # This pattern matches if
868
- # 1) The row starts and stops with | characters
869
- # 2) Only consists of characters '|', '-', ':' and whitespace
870
- # 3) Each section between the separators (i.e. '|')
871
- # a) has at least three consecutive dashes
872
- # b) can have whitespace at the beginning or the end
873
- # c) can have colon before and/or after dashes (for alignment)
874
- # Some examples:
875
- # |-----|----|-------| --> matches
876
- # |:---:|:---|-------| --> matches
877
- # | :------: | ----| --> matches
878
- # | - - - | - - - | --> does NOT match
879
- # |::---| --> does NOT match
880
- # |----:|:--|----| --> does NOT match
881
- pattern = /^(\|\s*:?-{3,}:?\s*)+\|$/
882
- unless second_row.match(pattern)
883
- # Second row is not in the form described by the pattern
884
- error_lines << (line_num + 1)
885
- end
886
- end
887
-
888
- error_lines
889
- end
890
- end
data/lib/mdl/ruleset.rb CHANGED
@@ -3,7 +3,7 @@ module MarkdownLint
3
3
  class Rule
4
4
  attr_accessor :id, :description
5
5
 
6
- def initialize(id, description, fallback_docs: nil, &block)
6
+ def initialize(id, description, fallback_docs: nil, &)
7
7
  @id = id
8
8
  @description = description
9
9
  @generate_docs = fallback_docs
@@ -11,7 +11,7 @@ module MarkdownLint
11
11
  @aliases = []
12
12
  @tags = []
13
13
  @params = {}
14
- instance_eval(&block)
14
+ instance_eval(&)
15
15
  end
16
16
 
17
17
  def check(&block)
@@ -48,67 +48,6 @@ module MarkdownLint
48
48
  def docs_url
49
49
  @generate_docs&.call(id, description)
50
50
  end
51
-
52
- # This method calculates the number of columns in a table row
53
- #
54
- # @param [String] table_row A row of the table in question.
55
- # @return [Numeric] Number of columns in the row
56
- def number_of_columns_in_a_table_row(table_row)
57
- columns = table_row.strip.split('|')
58
-
59
- if columns.empty?
60
- # The stripped line consists of zero or more pipe characters
61
- # and nothing more.
62
- #
63
- # Examples of stripped rows:
64
- # '||' --> one column
65
- # '|||' --> two columns
66
- # '|' --> zero columns
67
- [0, table_row.count('|') - 1].max
68
- else
69
- # Number of columns is the number of splited
70
- # segments with pipe separator. The first segment
71
- # is ignored when it's empty string because
72
- # someting like '|1|2|' is split into ['', '1', '2']
73
- # when using split('|') function.
74
- #
75
- # Some examples:
76
- # '|foo|bar|' --> two columns
77
- # ' |foo|bar|' --> two columns
78
- # '|foo|bar' --> two columns
79
- # 'foo|bar' --> two columns
80
- columns.size - (columns[0].empty? ? 1 : 0)
81
- end
82
- end
83
-
84
- # This method returns all the rows of a table
85
- #
86
- # @param [Array<String>] lines Lines of a doc as an array
87
- # @param [Numeric] pos Position/index of the table in the array
88
- # @return [Array<String>] Rows of the table in an array
89
- def get_table_rows(lines, pos)
90
- table_rows = []
91
- while pos < lines.length
92
- line = lines[pos]
93
-
94
- # If the previous line is a table and the current line
95
- # 1) includes pipe character
96
- # 2) does not start with code block identifiers
97
- # a) >= 4 spaces
98
- # b) < 4 spaces and ``` right after
99
- #
100
- # it is possibly a table row
101
- unless line.include?('|') && !line.start_with?(' ') &&
102
- !line.strip.start_with?('```')
103
- break
104
- end
105
-
106
- table_rows << line
107
- pos += 1
108
- end
109
-
110
- table_rows
111
- end
112
51
  end
113
52
 
114
53
  # defines a ruleset
@@ -119,9 +58,9 @@ module MarkdownLint
119
58
  @rules = {}
120
59
  end
121
60
 
122
- def rule(id, description, &block)
61
+ def rule(id, description, &)
123
62
  @rules[id] =
124
- Rule.new(id, description, :fallback_docs => @fallback_docs, &block)
63
+ Rule.new(id, description, :fallback_docs => @fallback_docs, &)
125
64
  end
126
65
 
127
66
  def load(rules_file)
data/lib/mdl/style.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'set'
2
-
3
1
  module MarkdownLint
4
2
  # defines a style
5
3
  class Style
data/lib/mdl/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MarkdownLint
2
- VERSION = '0.13.0'.freeze
2
+ VERSION = '0.15.0'.freeze
3
3
  end
data/lib/mdl.rb CHANGED
@@ -27,21 +27,21 @@ module MarkdownLint
27
27
  unless Config[:rules][:include].empty?
28
28
  rules.select! do |r, v|
29
29
  Config[:rules][:include].include?(r) or
30
- !(Config[:rules][:include] & v.aliases).empty?
30
+ Config[:rules][:include].intersect?(v.aliases)
31
31
  end
32
32
  end
33
33
  unless Config[:rules][:exclude].empty?
34
34
  rules.select! do |r, v|
35
35
  !Config[:rules][:exclude].include?(r) and
36
- (Config[:rules][:exclude] & v.aliases).empty?
36
+ !Config[:rules][:exclude].intersect?(v.aliases)
37
37
  end
38
38
  end
39
39
  end
40
40
  # Tag option filter
41
41
  if Config[:tags]
42
- rules.reject! { |_r, v| (v.tags & Config[:tags][:include]).empty? } \
42
+ rules.select! { |_r, v| v.tags.intersect?(Config[:tags][:include]) } \
43
43
  unless Config[:tags][:include].empty?
44
- rules.select! { |_r, v| (v.tags & Config[:tags][:exclude]).empty? } \
44
+ rules.reject! { |_r, v| v.tags.intersect?(Config[:tags][:exclude]) } \
45
45
  unless Config[:tags][:exclude].empty?
46
46
  end
47
47
 
data/mdl.gemspec CHANGED
@@ -19,17 +19,11 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = %w{mdl}
20
20
  spec.require_paths = ['lib']
21
21
 
22
- spec.required_ruby_version = '>= 2.7'
22
+ spec.required_ruby_version = '>= 3.2'
23
23
 
24
24
  spec.add_dependency 'kramdown', '~> 2.3'
25
25
  spec.add_dependency 'kramdown-parser-gfm', '~> 1.1'
26
- spec.add_dependency 'mixlib-cli', '~> 2.1', '>= 2.1.1'
27
- spec.add_dependency 'mixlib-config', '>= 2.2.1', '< 4'
26
+ spec.add_dependency 'mixlib-cli'
27
+ spec.add_dependency 'mixlib-config'
28
28
  spec.add_dependency 'mixlib-shellout'
29
-
30
- spec.add_development_dependency 'bundler', '>= 1.12', '< 3'
31
- spec.add_development_dependency 'minitest', '~> 5.9'
32
- spec.add_development_dependency 'pry', '~> 0.10'
33
- spec.add_development_dependency 'rake', '>= 11.2', '< 14'
34
- spec.add_development_dependency 'rubocop', '~> 1.28.1'
35
29
  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.13.0
4
+ version: 0.15.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: 2023-10-02 00:00:00.000000000 Z
11
+ date: 2025-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kramdown
@@ -42,42 +42,30 @@ dependencies:
42
42
  name: mixlib-cli
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.1'
48
45
  - - ">="
49
46
  - !ruby/object:Gem::Version
50
- version: 2.1.1
47
+ version: '0'
51
48
  type: :runtime
52
49
  prerelease: false
53
50
  version_requirements: !ruby/object:Gem::Requirement
54
51
  requirements:
55
- - - "~>"
56
- - !ruby/object:Gem::Version
57
- version: '2.1'
58
52
  - - ">="
59
53
  - !ruby/object:Gem::Version
60
- version: 2.1.1
54
+ version: '0'
61
55
  - !ruby/object:Gem::Dependency
62
56
  name: mixlib-config
63
57
  requirement: !ruby/object:Gem::Requirement
64
58
  requirements:
65
59
  - - ">="
66
60
  - !ruby/object:Gem::Version
67
- version: 2.2.1
68
- - - "<"
69
- - !ruby/object:Gem::Version
70
- version: '4'
61
+ version: '0'
71
62
  type: :runtime
72
63
  prerelease: false
73
64
  version_requirements: !ruby/object:Gem::Requirement
74
65
  requirements:
75
66
  - - ">="
76
67
  - !ruby/object:Gem::Version
77
- version: 2.2.1
78
- - - "<"
79
- - !ruby/object:Gem::Version
80
- version: '4'
68
+ version: '0'
81
69
  - !ruby/object:Gem::Dependency
82
70
  name: mixlib-shellout
83
71
  requirement: !ruby/object:Gem::Requirement
@@ -92,88 +80,6 @@ dependencies:
92
80
  - - ">="
93
81
  - !ruby/object:Gem::Version
94
82
  version: '0'
95
- - !ruby/object:Gem::Dependency
96
- name: bundler
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: '1.12'
102
- - - "<"
103
- - !ruby/object:Gem::Version
104
- version: '3'
105
- type: :development
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: '1.12'
112
- - - "<"
113
- - !ruby/object:Gem::Version
114
- version: '3'
115
- - !ruby/object:Gem::Dependency
116
- name: minitest
117
- requirement: !ruby/object:Gem::Requirement
118
- requirements:
119
- - - "~>"
120
- - !ruby/object:Gem::Version
121
- version: '5.9'
122
- type: :development
123
- prerelease: false
124
- version_requirements: !ruby/object:Gem::Requirement
125
- requirements:
126
- - - "~>"
127
- - !ruby/object:Gem::Version
128
- version: '5.9'
129
- - !ruby/object:Gem::Dependency
130
- name: pry
131
- requirement: !ruby/object:Gem::Requirement
132
- requirements:
133
- - - "~>"
134
- - !ruby/object:Gem::Version
135
- version: '0.10'
136
- type: :development
137
- prerelease: false
138
- version_requirements: !ruby/object:Gem::Requirement
139
- requirements:
140
- - - "~>"
141
- - !ruby/object:Gem::Version
142
- version: '0.10'
143
- - !ruby/object:Gem::Dependency
144
- name: rake
145
- requirement: !ruby/object:Gem::Requirement
146
- requirements:
147
- - - ">="
148
- - !ruby/object:Gem::Version
149
- version: '11.2'
150
- - - "<"
151
- - !ruby/object:Gem::Version
152
- version: '14'
153
- type: :development
154
- prerelease: false
155
- version_requirements: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '11.2'
160
- - - "<"
161
- - !ruby/object:Gem::Version
162
- version: '14'
163
- - !ruby/object:Gem::Dependency
164
- name: rubocop
165
- requirement: !ruby/object:Gem::Requirement
166
- requirements:
167
- - - "~>"
168
- - !ruby/object:Gem::Version
169
- version: 1.28.1
170
- type: :development
171
- prerelease: false
172
- version_requirements: !ruby/object:Gem::Requirement
173
- requirements:
174
- - - "~>"
175
- - !ruby/object:Gem::Version
176
- version: 1.28.1
177
83
  description: Style checker/lint tool for markdown files
178
84
  email:
179
85
  - mark@mivok.net
@@ -213,14 +119,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
213
119
  requirements:
214
120
  - - ">="
215
121
  - !ruby/object:Gem::Version
216
- version: '2.7'
122
+ version: '3.2'
217
123
  required_rubygems_version: !ruby/object:Gem::Requirement
218
124
  requirements:
219
125
  - - ">="
220
126
  - !ruby/object:Gem::Version
221
127
  version: '0'
222
128
  requirements: []
223
- rubygems_version: 3.3.15
129
+ rubygems_version: 3.5.22
224
130
  signing_key:
225
131
  specification_version: 4
226
132
  summary: Markdown lint tool