pragmater 6.3.3 → 8.0.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.
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pragmater
4
+ module Formatters
5
+ # Formats shebang pragmas in a consistent manner.
6
+ class Shebang
7
+ PATTERN = %r(\A\#!\s?/.*ruby\Z).freeze
8
+
9
+ def initialize string, pattern: PATTERN
10
+ @string = string
11
+ @pattern = pattern
12
+ end
13
+
14
+ def call
15
+ return string unless string.match? pattern
16
+
17
+ string.split("!").then { |octothorpe, path| "#{octothorpe}! #{path.strip}" }
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :string, :pattern
23
+ end
24
+ end
25
+ end
@@ -3,20 +3,10 @@
3
3
  module Pragmater
4
4
  # Gem identity information.
5
5
  module Identity
6
- def self.name
7
- "pragmater"
8
- end
9
-
10
- def self.label
11
- "Pragmater"
12
- end
13
-
14
- def self.version
15
- "6.3.3"
16
- end
17
-
18
- def self.version_label
19
- "#{label} #{version}"
20
- end
6
+ NAME = "pragmater"
7
+ LABEL = "Pragmater"
8
+ VERSION = "8.0.0"
9
+ VERSION_LABEL = "#{LABEL} #{VERSION}"
10
+ SUMMARY = "A command line interface for managing/formatting source file pragma comments."
21
11
  end
22
12
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pragmater
4
+ module Parsers
5
+ # Manages pragma comments.
6
+ class Comments
7
+ def initialize older, newer, formatter: Formatters::Main
8
+ @formatter = formatter
9
+ @older = format older
10
+ @newer = format newer
11
+ end
12
+
13
+ def insert
14
+ older.union newer
15
+ end
16
+
17
+ def remove
18
+ older - older.intersection(newer)
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :formatter, :older, :newer
24
+
25
+ def format pragmas
26
+ Array(pragmas).map { |pragma| formatter.new(pragma).call }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pragmater
4
+ module Parsers
5
+ # Parses a file into pragma comment and body lines.
6
+ class File
7
+ def initialize pattern: Formatters::Main::PATTERN,
8
+ comments: Comments,
9
+ processor: Processors::Handler.new
10
+ @pattern = pattern
11
+ @comments = comments
12
+ @processor = processor
13
+ end
14
+
15
+ def call path, new_comments, action:
16
+ path.each_line
17
+ .partition { |line| line.match? pattern }
18
+ .then do |old_comments, body|
19
+ processor.call action, wrap_in_new_line(old_comments, new_comments, action), body
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :pattern, :comments, :processor
26
+
27
+ def wrap_in_new_line old_comments, new_comments, action
28
+ comments.new(old_comments, new_comments).public_send(action).map { |line| "#{line}\n" }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pragmater
4
+ module Processors
5
+ # Handles the insertion or removal of pragma comments.
6
+ class Handler
7
+ DEFAULTS = {
8
+ insert: Inserter,
9
+ remove: Remover
10
+ }.freeze
11
+
12
+ def initialize processors: DEFAULTS
13
+ @processors = processors
14
+ end
15
+
16
+ def call action, comments, body
17
+ processors.fetch(action).new(comments, body).call
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :processors
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pragmater
4
+ module Processors
5
+ # Inserts new pragma comments.
6
+ class Inserter
7
+ def initialize comments, body
8
+ @comments = comments
9
+ @body = body
10
+ end
11
+
12
+ def call
13
+ body.first.then do |first|
14
+ comments.append "\n" unless first == "\n" || body.empty?
15
+ comments + body
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :comments, :body
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pragmater
4
+ module Processors
5
+ # Removes existing pragma comments.
6
+ class Remover
7
+ def initialize comments, body
8
+ @comments = comments
9
+ @body = body
10
+ end
11
+
12
+ def call
13
+ body.first.then do |first_line|
14
+ body.delete_at 0 if first_line == "\n" && comments.empty?
15
+ comments + body
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :comments, :body
22
+ end
23
+ end
24
+ end
@@ -1,32 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "pathname"
4
+ require "refinements/pathnames"
5
+
3
6
  module Pragmater
4
7
  # Adds/removes pragma comments for files in given path.
5
8
  class Runner
6
- # rubocop:disable Metrics/ParameterLists
7
- def initialize path = ".", comments: [], includes: [], writer: Writer
8
- @path = Pathname path
9
- @comments = Array comments
10
- @includes = Array includes
11
- @writer = writer
12
- end
13
- # rubocop:enable Metrics/ParameterLists
9
+ using Refinements::Pathnames
14
10
 
15
- def files
16
- return [] unless path.exist? && path.directory? && !includes.empty?
11
+ def self.for **attributes
12
+ new Context[attributes]
13
+ end
17
14
 
18
- Pathname.glob(%(#{path}/{#{includes.join ","}})).select(&:file?)
15
+ def initialize context, parser: Parsers::File.new
16
+ @context = context
17
+ @parser = parser
19
18
  end
20
19
 
21
- def run action:
22
- files.each do |file|
23
- writer.new(file, comments).public_send action
24
- yield file if block_given?
25
- end
20
+ def call
21
+ Pathname(context.root_dir).files("{#{context.includes.join ","}}").map(&method(:write))
26
22
  end
27
23
 
28
24
  private
29
25
 
30
- attr_reader :path, :comments, :includes, :writer
26
+ attr_reader :context, :parser
27
+
28
+ def write path
29
+ path.tap do |a_path|
30
+ a_path.write parser.call(a_path, context.comments, action: context.action).join
31
+ end
32
+ end
31
33
  end
32
34
  end
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pragmater
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.3.3
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIC/jCCAeagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
- a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0xOTAyMTcxNjAxMTFaFw0yMDAyMTcx
15
- NjAxMTFaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
13
+ MIIC/jCCAeagAwIBAgIBAzANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpicm9v
14
+ a2UvREM9YWxjaGVtaXN0cy9EQz1pbzAeFw0yMDAzMTUxNDQ1MzJaFw0yMTAzMTUx
15
+ NDQ1MzJaMCUxIzAhBgNVBAMMGmJyb29rZS9EQz1hbGNoZW1pc3RzL0RDPWlvMIIB
16
16
  IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6l1qpXTiomH1RfMRloyw7MiE
17
17
  xyVx/x8Yc3EupdH7uhNaTXQGyORN6aOY//1QXXMHIZ9tW74nZLhesWMSUMYy0XhB
18
18
  brs+KkurHnc9FnEJAbG7ebGvl/ncqZt72nQvaxpDxvuCBHgJAz+8i5wl6FhLw+oT
@@ -20,72 +20,44 @@ cert_chain:
20
20
  D5vkU0YlAm1r98BymuJlcQ1qdkVEI1d48ph4kcS0S0nv1RiuyVb6TCAR3Nu3VaVq
21
21
  3fPzZKJLZBx67UvXdbdicWPiUR75elI4PXpLIic3xytaF52ZJYyKZCNZJhNwfQID
22
22
  AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU0nzow9vc
23
- 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBANgfX7kPZkJvsbdWMvbe
24
- DUUYxRTqTUzCDpLd2p3sQvgLMKjTNSKt6CFq/kh+98b6RCgO6DqiVfxvOEq02dvf
25
- ebMN/ylQqan2FgiAs1rpP0/D4C0MlBjoDktsT+2IyLol1KmkDB20ExJ4Sf1GRNdA
26
- hpWOtcgqHtmrc7xzgB6BuyoYufrKKUlCO3ewTM4C375D2qO7hIdKuMOO3CdPMtSk
27
- OrWpbzCL+nbbXqeoqiHgZaUvcyyQrGj5sQRxMTzuMXzzQxtHnuTuKrcz16HMTX/O
28
- dKvURM+1PwDCzC5tvRwjhUJIizau6+MtkFCvJHmaAj1aZL3odcPejHj5Hxt/0CUW
29
- y84=
23
+ 2CdikiiE3fJhP/gY4ggwDQYJKoZIhvcNAQELBQADggEBAIHhAlD3po4sTYqacXaQ
24
+ XI9jIhrfMy//2PgbHWcETtlJPBeNUbbSNBABcllUHKqYsVDlSvSmss034KSWNR8F
25
+ bF1GcloicyvcCC4y6IoW4it0COAcdeaaxkxiBSgKdQFpff9REnDlIKK4uQ9lLxIo
26
+ Y2G5xubiziKZkyfWFuSr67PIjW3Bu673D1JVBArhA1qbgQmYQcy1CkGOjo+iO8Nf
27
+ 7u/QSfBHb+r/bXhKscDgPpnKwbUmvgO2+94zJG9KsrmIydlzYfsD09aXKx0t6Xy4
28
+ 2XV8FRa7/JimI07sPLC13eLY3xd/aYTi85Z782KIA4j0G8XEEWAX0ouBhlXPocZv
29
+ QWc=
30
30
  -----END CERTIFICATE-----
31
- date: 2019-11-01 00:00:00.000000000 Z
31
+ date: 2020-08-25 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
- name: runcom
34
+ name: refinements
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '5.0'
39
+ version: '7.7'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '5.0'
46
+ version: '7.7'
47
47
  - !ruby/object:Gem::Dependency
48
- name: thor
48
+ name: runcom
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.20'
53
+ version: '6.0'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '0.20'
61
- - !ruby/object:Gem::Dependency
62
- name: awesome_print
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '1.8'
68
- type: :development
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '1.8'
75
- - !ruby/object:Gem::Dependency
76
- name: bond
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.5'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '0.5'
60
+ version: '6.0'
89
61
  - !ruby/object:Gem::Dependency
90
62
  name: bundler-audit
91
63
  requirement: !ruby/object:Gem::Requirement
@@ -100,48 +72,34 @@ dependencies:
100
72
  - - "~>"
101
73
  - !ruby/object:Gem::Version
102
74
  version: '0.6'
103
- - !ruby/object:Gem::Dependency
104
- name: climate_control
105
- requirement: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: '0.2'
110
- type: :development
111
- prerelease: false
112
- version_requirements: !ruby/object:Gem::Requirement
113
- requirements:
114
- - - "~>"
115
- - !ruby/object:Gem::Version
116
- version: '0.2'
117
75
  - !ruby/object:Gem::Dependency
118
76
  name: gemsmith
119
77
  requirement: !ruby/object:Gem::Requirement
120
78
  requirements:
121
79
  - - "~>"
122
80
  - !ruby/object:Gem::Version
123
- version: '13.5'
81
+ version: '14.2'
124
82
  type: :development
125
83
  prerelease: false
126
84
  version_requirements: !ruby/object:Gem::Requirement
127
85
  requirements:
128
86
  - - "~>"
129
87
  - !ruby/object:Gem::Version
130
- version: '13.5'
88
+ version: '14.2'
131
89
  - !ruby/object:Gem::Dependency
132
- name: git-cop
90
+ name: git-lint
133
91
  requirement: !ruby/object:Gem::Requirement
134
92
  requirements:
135
93
  - - "~>"
136
94
  - !ruby/object:Gem::Version
137
- version: '3.5'
95
+ version: '1.0'
138
96
  type: :development
139
97
  prerelease: false
140
98
  version_requirements: !ruby/object:Gem::Requirement
141
99
  requirements:
142
100
  - - "~>"
143
101
  - !ruby/object:Gem::Version
144
- version: '3.5'
102
+ version: '1.0'
145
103
  - !ruby/object:Gem::Dependency
146
104
  name: guard-rspec
147
105
  requirement: !ruby/object:Gem::Requirement
@@ -156,48 +114,34 @@ dependencies:
156
114
  - - "~>"
157
115
  - !ruby/object:Gem::Version
158
116
  version: '4.7'
159
- - !ruby/object:Gem::Dependency
160
- name: hirb
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '0.7'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '0.7'
173
117
  - !ruby/object:Gem::Dependency
174
118
  name: pry
175
119
  requirement: !ruby/object:Gem::Requirement
176
120
  requirements:
177
121
  - - "~>"
178
122
  - !ruby/object:Gem::Version
179
- version: '0.10'
123
+ version: '0.13'
180
124
  type: :development
181
125
  prerelease: false
182
126
  version_requirements: !ruby/object:Gem::Requirement
183
127
  requirements:
184
128
  - - "~>"
185
129
  - !ruby/object:Gem::Version
186
- version: '0.10'
130
+ version: '0.13'
187
131
  - !ruby/object:Gem::Dependency
188
132
  name: pry-byebug
189
133
  requirement: !ruby/object:Gem::Requirement
190
134
  requirements:
191
135
  - - "~>"
192
136
  - !ruby/object:Gem::Version
193
- version: '3.5'
137
+ version: '3.9'
194
138
  type: :development
195
139
  prerelease: false
196
140
  version_requirements: !ruby/object:Gem::Requirement
197
141
  requirements:
198
142
  - - "~>"
199
143
  - !ruby/object:Gem::Version
200
- version: '3.5'
144
+ version: '3.9'
201
145
  - !ruby/object:Gem::Dependency
202
146
  name: rake
203
147
  requirement: !ruby/object:Gem::Requirement
@@ -218,14 +162,14 @@ dependencies:
218
162
  requirements:
219
163
  - - "~>"
220
164
  - !ruby/object:Gem::Version
221
- version: '5.4'
165
+ version: '6.0'
222
166
  type: :development
223
167
  prerelease: false
224
168
  version_requirements: !ruby/object:Gem::Requirement
225
169
  requirements:
226
170
  - - "~>"
227
171
  - !ruby/object:Gem::Version
228
- version: '5.4'
172
+ version: '6.0'
229
173
  - !ruby/object:Gem::Dependency
230
174
  name: rspec
231
175
  requirement: !ruby/object:Gem::Requirement
@@ -246,112 +190,112 @@ dependencies:
246
190
  requirements:
247
191
  - - "~>"
248
192
  - !ruby/object:Gem::Version
249
- version: '0.76'
193
+ version: '0.89'
250
194
  type: :development
251
195
  prerelease: false
252
196
  version_requirements: !ruby/object:Gem::Requirement
253
197
  requirements:
254
198
  - - "~>"
255
199
  - !ruby/object:Gem::Version
256
- version: '0.76'
200
+ version: '0.89'
257
201
  - !ruby/object:Gem::Dependency
258
202
  name: rubocop-performance
259
203
  requirement: !ruby/object:Gem::Requirement
260
204
  requirements:
261
205
  - - "~>"
262
206
  - !ruby/object:Gem::Version
263
- version: '1.4'
207
+ version: '1.5'
264
208
  type: :development
265
209
  prerelease: false
266
210
  version_requirements: !ruby/object:Gem::Requirement
267
211
  requirements:
268
212
  - - "~>"
269
213
  - !ruby/object:Gem::Version
270
- version: '1.4'
214
+ version: '1.5'
271
215
  - !ruby/object:Gem::Dependency
272
216
  name: rubocop-rake
273
217
  requirement: !ruby/object:Gem::Requirement
274
218
  requirements:
275
219
  - - "~>"
276
220
  - !ruby/object:Gem::Version
277
- version: '0.3'
221
+ version: '0.5'
278
222
  type: :development
279
223
  prerelease: false
280
224
  version_requirements: !ruby/object:Gem::Requirement
281
225
  requirements:
282
226
  - - "~>"
283
227
  - !ruby/object:Gem::Version
284
- version: '0.3'
228
+ version: '0.5'
285
229
  - !ruby/object:Gem::Dependency
286
230
  name: rubocop-rspec
287
231
  requirement: !ruby/object:Gem::Requirement
288
232
  requirements:
289
233
  - - "~>"
290
234
  - !ruby/object:Gem::Version
291
- version: '1.33'
235
+ version: '1.39'
292
236
  type: :development
293
237
  prerelease: false
294
238
  version_requirements: !ruby/object:Gem::Requirement
295
239
  requirements:
296
240
  - - "~>"
297
241
  - !ruby/object:Gem::Version
298
- version: '1.33'
242
+ version: '1.39'
299
243
  - !ruby/object:Gem::Dependency
300
244
  name: simplecov
301
245
  requirement: !ruby/object:Gem::Requirement
302
246
  requirements:
303
247
  - - "~>"
304
248
  - !ruby/object:Gem::Version
305
- version: '0.13'
249
+ version: '0.18'
306
250
  type: :development
307
251
  prerelease: false
308
252
  version_requirements: !ruby/object:Gem::Requirement
309
253
  requirements:
310
254
  - - "~>"
311
255
  - !ruby/object:Gem::Version
312
- version: '0.13'
313
- - !ruby/object:Gem::Dependency
314
- name: wirb
315
- requirement: !ruby/object:Gem::Requirement
316
- requirements:
317
- - - "~>"
318
- - !ruby/object:Gem::Version
319
- version: '2.1'
320
- type: :development
321
- prerelease: false
322
- version_requirements: !ruby/object:Gem::Requirement
323
- requirements:
324
- - - "~>"
325
- - !ruby/object:Gem::Version
326
- version: '2.1'
327
- description:
256
+ version: '0.18'
257
+ description:
328
258
  email:
329
259
  - brooke@alchemists.io
330
260
  executables:
331
261
  - pragmater
332
262
  extensions: []
333
263
  extra_rdoc_files:
334
- - README.md
335
- - LICENSE.md
264
+ - README.adoc
265
+ - LICENSE.adoc
336
266
  files:
337
- - LICENSE.md
338
- - README.md
267
+ - LICENSE.adoc
268
+ - README.adoc
339
269
  - bin/pragmater
340
270
  - lib/pragmater.rb
341
- - lib/pragmater/cli.rb
342
- - lib/pragmater/commenter.rb
343
- - lib/pragmater/formatter.rb
271
+ - lib/pragmater/cli/helper.rb
272
+ - lib/pragmater/cli/options/assembler.rb
273
+ - lib/pragmater/cli/options/configuration.rb
274
+ - lib/pragmater/cli/options/core.rb
275
+ - lib/pragmater/cli/options/defaults.yml
276
+ - lib/pragmater/cli/options/insert_remove.rb
277
+ - lib/pragmater/cli/options/merger.rb
278
+ - lib/pragmater/cli/shell.rb
279
+ - lib/pragmater/context.rb
280
+ - lib/pragmater/formatters/general.rb
281
+ - lib/pragmater/formatters/main.rb
282
+ - lib/pragmater/formatters/shebang.rb
344
283
  - lib/pragmater/identity.rb
284
+ - lib/pragmater/parsers/comments.rb
285
+ - lib/pragmater/parsers/file.rb
286
+ - lib/pragmater/processors/handler.rb
287
+ - lib/pragmater/processors/inserter.rb
288
+ - lib/pragmater/processors/remover.rb
345
289
  - lib/pragmater/runner.rb
346
- - lib/pragmater/writer.rb
347
- homepage: https://github.com/bkuhlmann/pragmater
290
+ homepage: https://www.alchemists.io/projects/pragmater
348
291
  licenses:
349
292
  - Apache-2.0
350
293
  metadata:
351
- source_code_uri: https://github.com/bkuhlmann/pragmater
352
- changelog_uri: https://github.com/bkuhlmann/pragmater/blob/master/CHANGES.md
353
294
  bug_tracker_uri: https://github.com/bkuhlmann/pragmater/issues
354
- post_install_message:
295
+ changelog_uri: https://www.alchemists.io/projects/pragmater/changes.html
296
+ documentation_uri: https://www.alchemists.io/projects/pragmater
297
+ source_code_uri: https://github.com/bkuhlmann/pragmater
298
+ post_install_message:
355
299
  rdoc_options: []
356
300
  require_paths:
357
301
  - lib
@@ -359,15 +303,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
359
303
  requirements:
360
304
  - - "~>"
361
305
  - !ruby/object:Gem::Version
362
- version: '2.6'
306
+ version: '2.7'
363
307
  required_rubygems_version: !ruby/object:Gem::Requirement
364
308
  requirements:
365
309
  - - ">="
366
310
  - !ruby/object:Gem::Version
367
311
  version: '0'
368
312
  requirements: []
369
- rubygems_version: 3.0.6
370
- signing_key:
313
+ rubygems_version: 3.1.4
314
+ signing_key:
371
315
  specification_version: 4
372
316
  summary: A command line interface for managing/formatting source file pragma comments.
373
317
  test_files: []