pack_stats 0.0.1 → 0.0.2

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: 60606e6b527c76b27deaac01ad5991ebe06ec7db76bc5fe9eb707d0cfdde9c56
4
- data.tar.gz: ec768521fe361499a52bb29b59b97d23249ef9bd6a9c1bc3c543c8d46d6ccc08
3
+ metadata.gz: da5c8a0753cdd0e4b878fc2fb2c2732fc5ca3664b1e53dc55f9c16e3b7f43fef
4
+ data.tar.gz: a57f443a4572e99c7bd8c187d5b963ff9fdecebf71cf5d1339518ea3f89d5852
5
5
  SHA512:
6
- metadata.gz: f33cff3e350f90dbd71cf07433df45bfc170fd9c2101e5713cae1976e034385af98fbc76eddc01ac0ed78009f6e23f2b2f43797999d1fd6e8405fbdb50c013b1
7
- data.tar.gz: f04b2b9ac1e3cdf3fcdf0811a1d2a9d1b0a8b2864278ed892caf61c1676fcf762839d24f03ef0f7625895ec37287dcaf3cc034c7ab672468d9b5b1ccf18a15a6
6
+ metadata.gz: 5c1bed7cbd4c71fe9937b9ea9ceb47a9784b7852f3a788f0f69c240848dd1d106e5be56a0005a2f6785f5e948c3419b2c9d7094bca559112e3289fe4334ea3ed
7
+ data.tar.gz: 06c0b6fd7a7af65934ad6c6f346bb0fafa61874742c12f4d752b8437e5f6024c34153a079c0666004d68eac8c693fbd5354a62d2fc7d45e8bdb6615ded6d0569
@@ -53,7 +53,7 @@ module PackStats
53
53
  sig { returns(T::Array[ParsePackwerk::Violation]) }
54
54
  def cross_group_violations
55
55
  all_violations = members.flat_map do |member|
56
- ParsePackwerk::DeprecatedReferences.for(member).violations
56
+ ParsePackwerk::PackageTodo.for(member).violations
57
57
  end
58
58
 
59
59
  all_violations.select do |violation|
@@ -12,7 +12,6 @@ module PackStats
12
12
  # Later, we might find a way we can get this directly from `packwerk`
13
13
  class PackwerkChecker < T::Struct
14
14
  const :setting, String
15
- const :strict_mode, String
16
15
  end
17
16
 
18
17
  sig { params(prefix: String, packages: T::Array[ParsePackwerk::Package], package_tags: T::Array[Tag]).returns(T::Array[GaugeMetric]) }
@@ -20,22 +19,21 @@ module PackStats
20
19
  metrics = T.let([], T::Array[GaugeMetric])
21
20
 
22
21
  checkers = [
23
- PackwerkChecker.new(setting: 'enforce_dependencies', strict_mode: 'enforce_dependencies_strictly'),
24
- PackwerkChecker.new(setting: 'enforce_privacy', strict_mode: 'enforce_privacy_strictly')
22
+ PackwerkChecker.new(setting: 'enforce_dependencies'),
23
+ PackwerkChecker.new(setting: 'enforce_privacy')
25
24
  ]
26
25
 
27
26
  checkers.each do |checker|
28
27
  ['false', 'true', 'strict'].each do |enabled_mode|
29
28
  count_of_packages = ParsePackwerk.all.count do |package|
30
- strict_mode = package.metadata[checker.strict_mode]
31
- enabled = YAML.load_file(package.yml)[checker.setting]
29
+ checker_setting = YAML.load_file(package.yml)[checker.setting]
32
30
  case enabled_mode
33
31
  when 'false'
34
- !enabled
32
+ !checker_setting
35
33
  when 'true'
36
- enabled && !strict_mode
34
+ checker_setting && checker_setting != 'strict'
37
35
  when 'strict'
38
- !!strict_mode
36
+ checker_setting == 'strict'
39
37
  end
40
38
  end
41
39
 
@@ -0,0 +1,584 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `ast` gem.
5
+ # Please instead update this file by running `bin/tapioca gem ast`.
6
+
7
+ # {AST} is a library for manipulating abstract syntax trees.
8
+ #
9
+ # It embraces immutability; each AST node is inherently frozen at
10
+ # creation, and updating a child node requires recreating that node
11
+ # and its every parent, recursively.
12
+ # This is a design choice. It does create some pressure on
13
+ # garbage collector, but completely eliminates all concurrency
14
+ # and aliasing problems.
15
+ #
16
+ # See also {AST::Node}, {AST::Processor::Mixin} and {AST::Sexp} for
17
+ # additional recommendations and design patterns.
18
+ #
19
+ # source://ast//lib/ast.rb#13
20
+ module AST; end
21
+
22
+ # Node is an immutable class, instances of which represent abstract
23
+ # syntax tree nodes. It combines semantic information (i.e. anything
24
+ # that affects the algorithmic properties of a program) with
25
+ # meta-information (line numbers or compiler intermediates).
26
+ #
27
+ # Notes on inheritance
28
+ # ====================
29
+ #
30
+ # The distinction between semantics and metadata is important. Complete
31
+ # semantic information should be contained within just the {#type} and
32
+ # {#children} of a Node instance; in other words, if an AST was to be
33
+ # stripped of all meta-information, it should remain a valid AST which
34
+ # could be successfully processed to yield a result with the same
35
+ # algorithmic properties.
36
+ #
37
+ # Thus, Node should never be inherited in order to define methods which
38
+ # affect or return semantic information, such as getters for `class_name`,
39
+ # `superclass` and `body` in the case of a hypothetical `ClassNode`. The
40
+ # correct solution is to use a generic Node with a {#type} of `:class`
41
+ # and three children. See also {Processor} for tips on working with such
42
+ # ASTs.
43
+ #
44
+ # On the other hand, Node can and should be inherited to define
45
+ # application-specific metadata (see also {#initialize}) or customize the
46
+ # printing format. It is expected that an application would have one or two
47
+ # such classes and use them across the entire codebase.
48
+ #
49
+ # The rationale for this pattern is extensibility and maintainability.
50
+ # Unlike static ones, dynamic languages do not require the presence of a
51
+ # predefined, rigid structure, nor does it improve dispatch efficiency,
52
+ # and while such a structure can certainly be defined, it does not add
53
+ # any value but incurs a maintaining cost.
54
+ # For example, extending the AST even with a transformation-local
55
+ # temporary node type requires making globally visible changes to
56
+ # the codebase.
57
+ #
58
+ # source://ast//lib/ast/node.rb#40
59
+ class AST::Node
60
+ # Constructs a new instance of Node.
61
+ #
62
+ # The arguments `type` and `children` are converted with `to_sym` and
63
+ # `to_a` respectively. Additionally, the result of converting `children`
64
+ # is frozen. While mutating the arguments is generally considered harmful,
65
+ # the most common case is to pass an array literal to the constructor. If
66
+ # your code does not expect the argument to be frozen, use `#dup`.
67
+ #
68
+ # The `properties` hash is passed to {#assign_properties}.
69
+ #
70
+ # @return [Node] a new instance of Node
71
+ #
72
+ # source://ast//lib/ast/node.rb#72
73
+ def initialize(type, children = T.unsafe(nil), properties = T.unsafe(nil)); end
74
+
75
+ # Concatenates `array` with `children` and returns the resulting node.
76
+ #
77
+ # @return [AST::Node]
78
+ #
79
+ # source://ast//lib/ast/node.rb#168
80
+ def +(array); end
81
+
82
+ # Appends `element` to `children` and returns the resulting node.
83
+ #
84
+ # @return [AST::Node]
85
+ #
86
+ # source://ast//lib/ast/node.rb#177
87
+ def <<(element); end
88
+
89
+ # Compares `self` to `other`, possibly converting with `to_ast`. Only
90
+ # `type` and `children` are compared; metadata is deliberately ignored.
91
+ #
92
+ # @return [Boolean]
93
+ #
94
+ # source://ast//lib/ast/node.rb#153
95
+ def ==(other); end
96
+
97
+ # Appends `element` to `children` and returns the resulting node.
98
+ #
99
+ # @return [AST::Node]
100
+ #
101
+ # source://ast//lib/ast/node.rb#177
102
+ def append(element); end
103
+
104
+ # Returns the children of this node.
105
+ # The returned value is frozen.
106
+ # The to_a alias is useful for decomposing nodes concisely.
107
+ # For example:
108
+ #
109
+ # node = s(:gasgn, :$foo, s(:integer, 1))
110
+ # var_name, value = *node
111
+ # p var_name # => :$foo
112
+ # p value # => (integer 1)
113
+ #
114
+ # @return [Array]
115
+ #
116
+ # source://ast//lib/ast/node.rb#56
117
+ def children; end
118
+
119
+ # Nodes are already frozen, so there is no harm in returning the
120
+ # current node as opposed to initializing from scratch and freezing
121
+ # another one.
122
+ #
123
+ # @return self
124
+ #
125
+ # source://ast//lib/ast/node.rb#115
126
+ def clone; end
127
+
128
+ # Concatenates `array` with `children` and returns the resulting node.
129
+ #
130
+ # @return [AST::Node]
131
+ #
132
+ # source://ast//lib/ast/node.rb#168
133
+ def concat(array); end
134
+
135
+ # Enables matching for Node, where type is the first element
136
+ # and the children are remaining items.
137
+ #
138
+ # @return [Array]
139
+ #
140
+ # source://ast//lib/ast/node.rb#253
141
+ def deconstruct; end
142
+
143
+ # Nodes are already frozen, so there is no harm in returning the
144
+ # current node as opposed to initializing from scratch and freezing
145
+ # another one.
146
+ #
147
+ # @return self
148
+ #
149
+ # source://ast//lib/ast/node.rb#115
150
+ def dup; end
151
+
152
+ # Test if other object is equal to
153
+ #
154
+ # @param other [Object]
155
+ # @return [Boolean]
156
+ #
157
+ # source://ast//lib/ast/node.rb#85
158
+ def eql?(other); end
159
+
160
+ # Returns the precomputed hash value for this node
161
+ #
162
+ # @return [Fixnum]
163
+ #
164
+ # source://ast//lib/ast/node.rb#61
165
+ def hash; end
166
+
167
+ # Converts `self` to a s-expression ruby string.
168
+ # The code return will recreate the node, using the sexp module s()
169
+ #
170
+ # @param indent [Integer] Base indentation level.
171
+ # @return [String]
172
+ #
173
+ # source://ast//lib/ast/node.rb#211
174
+ def inspect(indent = T.unsafe(nil)); end
175
+
176
+ # Returns the children of this node.
177
+ # The returned value is frozen.
178
+ # The to_a alias is useful for decomposing nodes concisely.
179
+ # For example:
180
+ #
181
+ # node = s(:gasgn, :$foo, s(:integer, 1))
182
+ # var_name, value = *node
183
+ # p var_name # => :$foo
184
+ # p value # => (integer 1)
185
+ #
186
+ # @return [Array]
187
+ #
188
+ # source://ast//lib/ast/node.rb#56
189
+ def to_a; end
190
+
191
+ # @return [AST::Node] self
192
+ #
193
+ # source://ast//lib/ast/node.rb#229
194
+ def to_ast; end
195
+
196
+ # Converts `self` to a pretty-printed s-expression.
197
+ #
198
+ # @param indent [Integer] Base indentation level.
199
+ # @return [String]
200
+ #
201
+ # source://ast//lib/ast/node.rb#187
202
+ def to_s(indent = T.unsafe(nil)); end
203
+
204
+ # Converts `self` to a pretty-printed s-expression.
205
+ #
206
+ # @param indent [Integer] Base indentation level.
207
+ # @return [String]
208
+ #
209
+ # source://ast//lib/ast/node.rb#187
210
+ def to_sexp(indent = T.unsafe(nil)); end
211
+
212
+ # Converts `self` to an Array where the first element is the type as a Symbol,
213
+ # and subsequent elements are the same representation of its children.
214
+ #
215
+ # @return [Array<Symbol, [...Array]>]
216
+ #
217
+ # source://ast//lib/ast/node.rb#237
218
+ def to_sexp_array; end
219
+
220
+ # Returns the type of this node.
221
+ #
222
+ # @return [Symbol]
223
+ #
224
+ # source://ast//lib/ast/node.rb#43
225
+ def type; end
226
+
227
+ # Returns a new instance of Node where non-nil arguments replace the
228
+ # corresponding fields of `self`.
229
+ #
230
+ # For example, `Node.new(:foo, [ 1, 2 ]).updated(:bar)` would yield
231
+ # `(bar 1 2)`, and `Node.new(:foo, [ 1, 2 ]).updated(nil, [])` would
232
+ # yield `(foo)`.
233
+ #
234
+ # If the resulting node would be identical to `self`, does nothing.
235
+ #
236
+ # @param type [Symbol, nil]
237
+ # @param children [Array, nil]
238
+ # @param properties [Hash, nil]
239
+ # @return [AST::Node]
240
+ #
241
+ # source://ast//lib/ast/node.rb#133
242
+ def updated(type = T.unsafe(nil), children = T.unsafe(nil), properties = T.unsafe(nil)); end
243
+
244
+ protected
245
+
246
+ # By default, each entry in the `properties` hash is assigned to
247
+ # an instance variable in this instance of Node. A subclass should define
248
+ # attribute readers for such variables. The values passed in the hash
249
+ # are not frozen or whitelisted; such behavior can also be implemented
250
+ # by subclassing Node and overriding this method.
251
+ #
252
+ # @return [nil]
253
+ #
254
+ # source://ast//lib/ast/node.rb#98
255
+ def assign_properties(properties); end
256
+
257
+ # Returns `@type` with all underscores replaced by dashes. This allows
258
+ # to write symbol literals without quotes in Ruby sources and yet have
259
+ # nicely looking s-expressions.
260
+ #
261
+ # @return [String]
262
+ #
263
+ # source://ast//lib/ast/node.rb#264
264
+ def fancy_type; end
265
+
266
+ private
267
+
268
+ def original_dup; end
269
+ end
270
+
271
+ # This class includes {AST::Processor::Mixin}; however, it is
272
+ # deprecated, since the module defines all of the behaviors that
273
+ # the processor includes. Any new libraries should use
274
+ # {AST::Processor::Mixin} instead of subclassing this.
275
+ #
276
+ # @deprecated Use {AST::Processor::Mixin} instead.
277
+ #
278
+ # source://ast//lib/ast/processor.rb#8
279
+ class AST::Processor
280
+ include ::AST::Processor::Mixin
281
+ end
282
+
283
+ # The processor module is a module which helps transforming one
284
+ # AST into another. In a nutshell, the {#process} method accepts
285
+ # a {Node} and dispatches it to a handler corresponding to its
286
+ # type, and returns a (possibly) updated variant of the node.
287
+ #
288
+ # The processor module has a set of associated design patterns.
289
+ # They are best explained with a concrete example. Let's define a
290
+ # simple arithmetic language and an AST format for it:
291
+ #
292
+ # Terminals (AST nodes which do not have other AST nodes inside):
293
+ #
294
+ # * `(integer <int-literal>)`,
295
+ #
296
+ # Nonterminals (AST nodes with other nodes as children):
297
+ #
298
+ # * `(add <node> <node>)`,
299
+ # * `(multiply <node> <node>)`,
300
+ # * `(divide <node> <node>)`,
301
+ # * `(negate <node>)`,
302
+ # * `(store <node> <string-literal>)`: stores value of `<node>`
303
+ # into a variable named `<string-literal>`,
304
+ # * `(load <string-literal>)`: loads value of a variable named
305
+ # `<string-literal>`,
306
+ # * `(each <node> ...)`: computes each of the `<node>`s and
307
+ # prints the result.
308
+ #
309
+ # All AST nodes have the same Ruby class, and therefore they don't
310
+ # know how to traverse themselves. (A solution which dynamically
311
+ # checks the type of children is possible, but is slow and
312
+ # error-prone.) So, a class including the module which knows how
313
+ # to traverse the entire tree should be defined. Such classes
314
+ # have a handler for each nonterminal node which recursively
315
+ # processes children nodes:
316
+ #
317
+ # require 'ast'
318
+ #
319
+ # class ArithmeticsProcessor
320
+ # include AST::Processor::Mixin
321
+ # # This method traverses any binary operators such as (add)
322
+ # # or (multiply).
323
+ # def process_binary_op(node)
324
+ # # Children aren't decomposed automatically; it is
325
+ # # suggested to use Ruby multiple assignment expansion,
326
+ # # as it is very convenient here.
327
+ # left_expr, right_expr = *node
328
+ #
329
+ # # AST::Node#updated won't change node type if nil is
330
+ # # passed as a first argument, which allows to reuse the
331
+ # # same handler for multiple node types using `alias'
332
+ # # (below).
333
+ # node.updated(nil, [
334
+ # process(left_expr),
335
+ # process(right_expr)
336
+ # ])
337
+ # end
338
+ # alias_method :on_add, :process_binary_op
339
+ # alias_method :on_multiply, :process_binary_op
340
+ # alias_method :on_divide, :process_binary_op
341
+ #
342
+ # def on_negate(node)
343
+ # # It is also possible to use #process_all for more
344
+ # # compact code if every child is a Node.
345
+ # node.updated(nil, process_all(node))
346
+ # end
347
+ #
348
+ # def on_store(node)
349
+ # expr, variable_name = *node
350
+ #
351
+ # # Note that variable_name is not a Node and thus isn't
352
+ # # passed to #process.
353
+ # node.updated(nil, [
354
+ # process(expr),
355
+ # variable_name
356
+ # ])
357
+ # end
358
+ #
359
+ # # (load) is effectively a terminal node, and so it does
360
+ # # not need an explicit handler, as the following is the
361
+ # # default behavior. Essentially, for any nodes that don't
362
+ # # have a defined handler, the node remains unchanged.
363
+ # def on_load(node)
364
+ # nil
365
+ # end
366
+ #
367
+ # def on_each(node)
368
+ # node.updated(nil, process_all(node))
369
+ # end
370
+ # end
371
+ #
372
+ # Let's test our ArithmeticsProcessor:
373
+ #
374
+ # include AST::Sexp
375
+ # expr = s(:add, s(:integer, 2), s(:integer, 2))
376
+ #
377
+ # p ArithmeticsProcessor.new.process(expr) == expr # => true
378
+ #
379
+ # As expected, it does not change anything at all. This isn't
380
+ # actually very useful, so let's now define a Calculator, which
381
+ # will compute the expression values:
382
+ #
383
+ # # This Processor folds nonterminal nodes and returns an
384
+ # # (integer) terminal node.
385
+ # class ArithmeticsCalculator < ArithmeticsProcessor
386
+ # def compute_op(node)
387
+ # # First, node children are processed and then unpacked
388
+ # # to local variables.
389
+ # nodes = process_all(node)
390
+ #
391
+ # if nodes.all? { |node| node.type == :integer }
392
+ # # If each of those nodes represents a literal, we can
393
+ # # fold this node!
394
+ # values = nodes.map { |node| node.children.first }
395
+ # AST::Node.new(:integer, [
396
+ # yield(values)
397
+ # ])
398
+ # else
399
+ # # Otherwise, we can just leave the current node in the
400
+ # # tree and only update it with processed children
401
+ # # nodes, which can be partially folded.
402
+ # node.updated(nil, nodes)
403
+ # end
404
+ # end
405
+ #
406
+ # def on_add(node)
407
+ # compute_op(node) { |left, right| left + right }
408
+ # end
409
+ #
410
+ # def on_multiply(node)
411
+ # compute_op(node) { |left, right| left * right }
412
+ # end
413
+ # end
414
+ #
415
+ # Let's check:
416
+ #
417
+ # p ArithmeticsCalculator.new.process(expr) # => (integer 4)
418
+ #
419
+ # Excellent, the calculator works! Now, a careful reader could
420
+ # notice that the ArithmeticsCalculator does not know how to
421
+ # divide numbers. What if we pass an expression with division to
422
+ # it?
423
+ #
424
+ # expr_with_division = \
425
+ # s(:add,
426
+ # s(:integer, 1),
427
+ # s(:divide,
428
+ # s(:add, s(:integer, 8), s(:integer, 4)),
429
+ # s(:integer, 3))) # 1 + (8 + 4) / 3
430
+ #
431
+ # folded_expr_with_division = ArithmeticsCalculator.new.process(expr_with_division)
432
+ # p folded_expr_with_division
433
+ # # => (add
434
+ # # (integer 1)
435
+ # # (divide
436
+ # # (integer 12)
437
+ # # (integer 3)))
438
+ #
439
+ # As you can see, the expression was folded _partially_: the inner
440
+ # `(add)` node which could be computed was folded to
441
+ # `(integer 12)`, the `(divide)` node is left as-is because there
442
+ # is no computing handler for it, and the root `(add)` node was
443
+ # also left as it is because some of its children were not
444
+ # literals.
445
+ #
446
+ # Note that this partial folding is only possible because the
447
+ # _data_ format, i.e. the format in which the computed values of
448
+ # the nodes are represented, is the same as the AST itself.
449
+ #
450
+ # Let's extend our ArithmeticsCalculator class further.
451
+ #
452
+ # class ArithmeticsCalculator
453
+ # def on_divide(node)
454
+ # compute_op(node) { |left, right| left / right }
455
+ # end
456
+ #
457
+ # def on_negate(node)
458
+ # # Note how #compute_op works regardless of the operator
459
+ # # arity.
460
+ # compute_op(node) { |value| -value }
461
+ # end
462
+ # end
463
+ #
464
+ # Now, let's apply our renewed ArithmeticsCalculator to a partial
465
+ # result of previous evaluation:
466
+ #
467
+ # p ArithmeticsCalculator.new.process(expr_with_division) # => (integer 5)
468
+ #
469
+ # Five! Excellent. This is also pretty much how CRuby 1.8 executed
470
+ # its programs.
471
+ #
472
+ # Now, let's do some automated bug searching. Division by zero is
473
+ # an error, right? So if we could detect that someone has divided
474
+ # by zero before the program is even run, that could save some
475
+ # debugging time.
476
+ #
477
+ # class DivisionByZeroVerifier < ArithmeticsProcessor
478
+ # class VerificationFailure < Exception; end
479
+ #
480
+ # def on_divide(node)
481
+ # # You need to process the children to handle nested divisions
482
+ # # such as:
483
+ # # (divide
484
+ # # (integer 1)
485
+ # # (divide (integer 1) (integer 0))
486
+ # left, right = process_all(node)
487
+ #
488
+ # if right.type == :integer &&
489
+ # right.children.first == 0
490
+ # raise VerificationFailure, "Ouch! This code divides by zero."
491
+ # end
492
+ # end
493
+ #
494
+ # def divides_by_zero?(ast)
495
+ # process(ast)
496
+ # false
497
+ # rescue VerificationFailure
498
+ # true
499
+ # end
500
+ # end
501
+ #
502
+ # nice_expr = \
503
+ # s(:divide,
504
+ # s(:add, s(:integer, 10), s(:integer, 2)),
505
+ # s(:integer, 4))
506
+ #
507
+ # p DivisionByZeroVerifier.new.divides_by_zero?(nice_expr)
508
+ # # => false. Good.
509
+ #
510
+ # bad_expr = \
511
+ # s(:add, s(:integer, 10),
512
+ # s(:divide, s(:integer, 1), s(:integer, 0)))
513
+ #
514
+ # p DivisionByZeroVerifier.new.divides_by_zero?(bad_expr)
515
+ # # => true. WHOOPS. DO NOT RUN THIS.
516
+ #
517
+ # Of course, this won't detect more complex cases... unless you
518
+ # use some partial evaluation before! The possibilites are
519
+ # endless. Have fun.
520
+ #
521
+ # source://ast//lib/ast/processor/mixin.rb#240
522
+ module AST::Processor::Mixin
523
+ # Default handler. Does nothing.
524
+ #
525
+ # @param node [AST::Node]
526
+ # @return [AST::Node, nil]
527
+ #
528
+ # source://ast//lib/ast/processor/mixin.rb#284
529
+ def handler_missing(node); end
530
+
531
+ # Dispatches `node`. If a node has type `:foo`, then a handler
532
+ # named `on_foo` is invoked with one argument, the `node`; if
533
+ # there isn't such a handler, {#handler_missing} is invoked
534
+ # with the same argument.
535
+ #
536
+ # If the handler returns `nil`, `node` is returned; otherwise,
537
+ # the return value of the handler is passed along.
538
+ #
539
+ # @param node [AST::Node, nil]
540
+ # @return [AST::Node, nil]
541
+ #
542
+ # source://ast//lib/ast/processor/mixin.rb#251
543
+ def process(node); end
544
+
545
+ # {#process}es each node from `nodes` and returns an array of
546
+ # results.
547
+ #
548
+ # @param nodes [Array<AST::Node>]
549
+ # @return [Array<AST::Node>]
550
+ #
551
+ # source://ast//lib/ast/processor/mixin.rb#274
552
+ def process_all(nodes); end
553
+ end
554
+
555
+ # This simple module is very useful in the cases where one needs
556
+ # to define deeply nested ASTs from Ruby code, for example, in
557
+ # tests. It should be used like this:
558
+ #
559
+ # describe YourLanguage::AST do
560
+ # include Sexp
561
+ #
562
+ # it "should correctly parse expressions" do
563
+ # YourLanguage.parse("1 + 2 * 3").should ==
564
+ # s(:add,
565
+ # s(:integer, 1),
566
+ # s(:multiply,
567
+ # s(:integer, 2),
568
+ # s(:integer, 3)))
569
+ # end
570
+ # end
571
+ #
572
+ # This way the amount of boilerplate code is greatly reduced.
573
+ #
574
+ # source://ast//lib/ast/sexp.rb#20
575
+ module AST::Sexp
576
+ # Creates a {Node} with type `type` and children `children`.
577
+ # Note that the resulting node is of the type AST::Node and not a
578
+ # subclass.
579
+ # This would not pose a problem with comparisons, as {Node#==}
580
+ # ignores metadata.
581
+ #
582
+ # source://ast//lib/ast/sexp.rb#26
583
+ def s(type, *children); end
584
+ end
@@ -4,86 +4,120 @@
4
4
  # This is an autogenerated file for types exported from the `parse_packwerk` gem.
5
5
  # Please instead update this file by running `bin/tapioca gem parse_packwerk`.
6
6
 
7
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#3
7
8
  module ParsePackwerk
8
9
  class << self
10
+ # source://parse_packwerk//lib/parse_packwerk.rb#28
9
11
  sig { returns(T::Array[::ParsePackwerk::Package]) }
10
12
  def all; end
11
13
 
14
+ # source://parse_packwerk//lib/parse_packwerk.rb#112
12
15
  sig { void }
13
16
  def bust_cache!; end
14
17
 
18
+ # source://parse_packwerk//lib/parse_packwerk.rb#33
15
19
  sig { params(name: ::String).returns(T.nilable(::ParsePackwerk::Package)) }
16
20
  def find(name); end
17
21
 
22
+ # source://parse_packwerk//lib/parse_packwerk.rb#43
18
23
  sig { params(file_path: T.any(::Pathname, ::String)).returns(::ParsePackwerk::Package) }
19
24
  def package_from_path(file_path); end
20
25
 
26
+ # source://parse_packwerk//lib/parse_packwerk.rb#54
21
27
  sig { params(package: ::ParsePackwerk::Package).void }
22
28
  def write_package_yml!(package); end
23
29
 
30
+ # source://parse_packwerk//lib/parse_packwerk.rb#38
24
31
  sig { returns(::ParsePackwerk::Configuration) }
25
32
  def yml; end
26
33
 
27
34
  private
28
35
 
36
+ # We memoize packages_by_name for fast lookup.
37
+ # Since Graph is an immutable value object, we can create indexes and general caching mechanisms safely.
38
+ #
39
+ # source://parse_packwerk//lib/parse_packwerk.rb#100
29
40
  sig { returns(T::Hash[::String, ::ParsePackwerk::Package]) }
30
41
  def packages_by_name; end
31
42
  end
32
43
  end
33
44
 
45
+ # source://parse_packwerk//lib/parse_packwerk/configuration.rb#4
34
46
  class ParsePackwerk::Configuration < ::T::Struct
35
47
  const :exclude, T::Array[::String]
36
48
  const :package_paths, T::Array[::String]
37
49
 
38
50
  class << self
51
+ # source://parse_packwerk//lib/parse_packwerk/configuration.rb#28
39
52
  sig { params(config_hash: T::Hash[T.untyped, T.untyped]).returns(T::Array[::String]) }
40
53
  def excludes(config_hash); end
41
54
 
55
+ # source://parse_packwerk//lib/parse_packwerk/configuration.rb#11
42
56
  sig { returns(::ParsePackwerk::Configuration) }
43
57
  def fetch; end
44
58
 
59
+ # source://sorbet-runtime/0.5.9924/lib/types/struct.rb#13
45
60
  def inherited(s); end
46
61
 
62
+ # source://parse_packwerk//lib/parse_packwerk/configuration.rb#40
47
63
  sig { params(config_hash: T::Hash[T.untyped, T.untyped]).returns(T::Array[::String]) }
48
64
  def package_paths(config_hash); end
49
65
  end
50
66
  end
51
67
 
68
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#22
52
69
  ParsePackwerk::DEFAULT_EXCLUDE_GLOBS = T.let(T.unsafe(nil), Array)
53
- ParsePackwerk::DEFAULT_PACKAGE_PATHS = T.let(T.unsafe(nil), Array)
54
- ParsePackwerk::DEFAULT_PUBLIC_PATH = T.let(T.unsafe(nil), String)
55
- ParsePackwerk::DEPENDENCIES = T.let(T.unsafe(nil), String)
56
- ParsePackwerk::DEPRECATED_REFERENCES_YML_NAME = T.let(T.unsafe(nil), String)
57
70
 
58
- class ParsePackwerk::DeprecatedReferences < ::T::Struct
59
- const :pathname, ::Pathname
60
- const :violations, T::Array[::ParsePackwerk::Violation]
71
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#23
72
+ ParsePackwerk::DEFAULT_PACKAGE_PATHS = T.let(T.unsafe(nil), Array)
61
73
 
62
- class << self
63
- sig { params(package: ::ParsePackwerk::Package).returns(::ParsePackwerk::DeprecatedReferences) }
64
- def for(package); end
74
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#24
75
+ ParsePackwerk::DEFAULT_PUBLIC_PATH = T.let(T.unsafe(nil), String)
65
76
 
66
- sig { params(pathname: ::Pathname).returns(::ParsePackwerk::DeprecatedReferences) }
67
- def from(pathname); end
77
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#14
78
+ ParsePackwerk::DEPENDENCIES = T.let(T.unsafe(nil), String)
68
79
 
69
- def inherited(s); end
70
- end
71
- end
80
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#10
81
+ ParsePackwerk::DEPENDENCY_VIOLATION_TYPE = T.let(T.unsafe(nil), String)
72
82
 
83
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#8
73
84
  ParsePackwerk::ENFORCE_DEPENDENCIES = T.let(T.unsafe(nil), String)
85
+
86
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#9
74
87
  ParsePackwerk::ENFORCE_PRIVACY = T.let(T.unsafe(nil), String)
88
+
89
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#13
75
90
  ParsePackwerk::METADATA = T.let(T.unsafe(nil), String)
91
+
92
+ # Since this metadata is unstructured YAML, it could be any type. We leave it to clients of `ParsePackwerk::Package`
93
+ # to add types based on their known usage of metadata.
94
+ #
95
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#18
76
96
  ParsePackwerk::MetadataYmlType = T.type_alias { T::Hash[T.untyped, T.untyped] }
77
97
 
98
+ # source://parse_packwerk//lib/parse_packwerk.rb#14
78
99
  class ParsePackwerk::MissingConfiguration < ::StandardError
100
+ # source://parse_packwerk//lib/parse_packwerk.rb#18
79
101
  sig { params(packwerk_file_name: ::Pathname).void }
80
102
  def initialize(packwerk_file_name); end
81
103
  end
82
104
 
105
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#7
106
+ ParsePackwerk::PACKAGE_TODO_YML_NAME = T.let(T.unsafe(nil), String)
107
+
108
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#5
83
109
  ParsePackwerk::PACKAGE_YML_NAME = T.let(T.unsafe(nil), String)
110
+
111
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#6
84
112
  ParsePackwerk::PACKWERK_YML_NAME = T.let(T.unsafe(nil), String)
113
+
114
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#11
115
+ ParsePackwerk::PRIVACY_VIOLATION_TYPE = T.let(T.unsafe(nil), String)
116
+
117
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#12
85
118
  ParsePackwerk::PUBLIC_PATH = T.let(T.unsafe(nil), String)
86
119
 
120
+ # source://parse_packwerk//lib/parse_packwerk/package.rb#4
87
121
  class ParsePackwerk::Package < ::T::Struct
88
122
  const :dependencies, T::Array[::String]
89
123
  const :enforce_dependencies, T::Boolean
@@ -92,34 +126,44 @@ class ParsePackwerk::Package < ::T::Struct
92
126
  const :name, ::String
93
127
  const :public_path, ::String, default: T.unsafe(nil)
94
128
 
129
+ # source://parse_packwerk//lib/parse_packwerk/package.rb#35
95
130
  sig { returns(::Pathname) }
96
131
  def directory; end
97
132
 
133
+ # source://parse_packwerk//lib/parse_packwerk/package.rb#45
98
134
  sig { returns(T::Boolean) }
99
135
  def enforces_dependencies?; end
100
136
 
137
+ # source://parse_packwerk//lib/parse_packwerk/package.rb#50
101
138
  sig { returns(T::Boolean) }
102
139
  def enforces_privacy?; end
103
140
 
141
+ # source://parse_packwerk//lib/parse_packwerk/package.rb#40
104
142
  sig { returns(::Pathname) }
105
143
  def public_directory; end
106
144
 
145
+ # source://parse_packwerk//lib/parse_packwerk/package.rb#55
107
146
  sig { returns(T::Array[::ParsePackwerk::Violation]) }
108
147
  def violations; end
109
148
 
149
+ # source://parse_packwerk//lib/parse_packwerk/package.rb#30
110
150
  sig { returns(::Pathname) }
111
151
  def yml; end
112
152
 
113
153
  class << self
154
+ # source://parse_packwerk//lib/parse_packwerk/package.rb#15
114
155
  sig { params(pathname: ::Pathname).returns(::ParsePackwerk::Package) }
115
156
  def from(pathname); end
116
157
 
158
+ # source://sorbet-runtime/0.5.9924/lib/types/struct.rb#13
117
159
  def inherited(s); end
118
160
  end
119
161
  end
120
162
 
163
+ # source://parse_packwerk//lib/parse_packwerk/package_set.rb#8
121
164
  class ParsePackwerk::PackageSet
122
165
  class << self
166
+ # source://parse_packwerk//lib/parse_packwerk/package_set.rb#12
123
167
  sig do
124
168
  params(
125
169
  package_pathspec: T::Array[::String],
@@ -130,26 +174,51 @@ class ParsePackwerk::PackageSet
130
174
 
131
175
  private
132
176
 
177
+ # source://parse_packwerk//lib/parse_packwerk/package_set.rb#28
133
178
  sig { params(globs: T::Array[::String], path: ::Pathname).returns(T::Boolean) }
134
179
  def exclude_path?(globs, path); end
135
180
  end
136
181
  end
137
182
 
183
+ # source://parse_packwerk//lib/parse_packwerk/package_todo.rb#4
184
+ class ParsePackwerk::PackageTodo < ::T::Struct
185
+ const :pathname, ::Pathname
186
+ const :violations, T::Array[::ParsePackwerk::Violation]
187
+
188
+ class << self
189
+ # source://parse_packwerk//lib/parse_packwerk/package_todo.rb#11
190
+ sig { params(package: ::ParsePackwerk::Package).returns(::ParsePackwerk::PackageTodo) }
191
+ def for(package); end
192
+
193
+ # source://parse_packwerk//lib/parse_packwerk/package_todo.rb#17
194
+ sig { params(pathname: ::Pathname).returns(::ParsePackwerk::PackageTodo) }
195
+ def from(pathname); end
196
+
197
+ # source://sorbet-runtime/0.5.9924/lib/types/struct.rb#13
198
+ def inherited(s); end
199
+ end
200
+ end
201
+
202
+ # source://parse_packwerk//lib/parse_packwerk/constants.rb#4
138
203
  ParsePackwerk::ROOT_PACKAGE_NAME = T.let(T.unsafe(nil), String)
139
204
 
205
+ # source://parse_packwerk//lib/parse_packwerk/violation.rb#4
140
206
  class ParsePackwerk::Violation < ::T::Struct
141
207
  const :class_name, ::String
142
208
  const :files, T::Array[::String]
143
209
  const :to_package_name, ::String
144
210
  const :type, ::String
145
211
 
212
+ # source://parse_packwerk//lib/parse_packwerk/violation.rb#13
146
213
  sig { returns(T::Boolean) }
147
214
  def dependency?; end
148
215
 
216
+ # source://parse_packwerk//lib/parse_packwerk/violation.rb#18
149
217
  sig { returns(T::Boolean) }
150
218
  def privacy?; end
151
219
 
152
220
  class << self
221
+ # source://sorbet-runtime/0.5.9924/lib/types/struct.rb#13
153
222
  def inherited(s); end
154
223
  end
155
224
  end
@@ -0,0 +1,272 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `rubocop-packs` gem.
5
+ # Please instead update this file by running `bin/tapioca gem rubocop-packs`.
6
+
7
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#4
8
+ module RuboCop; end
9
+
10
+ # source://rubocop-packs//lib/rubocop/cop/packwerk_lite/private.rb#4
11
+ module RuboCop::Cop; end
12
+
13
+ # source://rubocop-packs//lib/rubocop/cop/packs/root_namespace_is_pack_name/desired_zeitwerk_api.rb#5
14
+ module RuboCop::Cop::Packs; end
15
+
16
+ # This is a private class that represents API that we would prefer to be available somehow in Zeitwerk.
17
+ # However, the boundaries between systems (packwerk/zeitwerk, rubocop/zeitwerk) are poor in this class, so
18
+ # that would need to be separated prior to proposing any API changes in zeitwerk.
19
+ #
20
+ # source://rubocop-packs//lib/rubocop/cop/packs/root_namespace_is_pack_name/desired_zeitwerk_api.rb#12
21
+ class RuboCop::Cop::Packs::RootNamespaceIsPackName::DesiredZeitwerkApi
22
+ # For now, this API includes `package_for_path`
23
+ # If this were truly zeitwerk API, it wouldn't include any mention of packs and it would likely not need the package at all
24
+ # Since it could get the actual namespace without knowing anything about packs.
25
+ # However, we would need to pass to it the desired namespace based on the pack name for it to be able to suggest
26
+ # a desired filepath.
27
+ # Likely this means that our own cop should determine the desired namespace and pass that in
28
+ # and this can determine actual namespace and how to get to expected.
29
+ #
30
+ # source://rubocop-packs//lib/rubocop/cop/packs/root_namespace_is_pack_name/desired_zeitwerk_api.rb#32
31
+ sig do
32
+ params(
33
+ relative_filename: ::String,
34
+ package_for_path: ::ParsePackwerk::Package
35
+ ).returns(T.nilable(::RuboCop::Cop::Packs::RootNamespaceIsPackName::DesiredZeitwerkApi::NamespaceContext))
36
+ end
37
+ def for_file(relative_filename, package_for_path); end
38
+
39
+ # source://rubocop-packs//lib/rubocop/cop/packs/root_namespace_is_pack_name/desired_zeitwerk_api.rb#86
40
+ sig { params(pack: ::ParsePackwerk::Package).returns(::String) }
41
+ def get_pack_based_namespace(pack); end
42
+
43
+ private
44
+
45
+ # source://rubocop-packs//lib/rubocop/cop/packs/root_namespace_is_pack_name/desired_zeitwerk_api.rb#103
46
+ sig { params(remaining_file_path: ::String, package_name: ::String).returns(::String) }
47
+ def get_actual_namespace(remaining_file_path, package_name); end
48
+
49
+ # source://rubocop-packs//lib/rubocop/cop/packs/root_namespace_is_pack_name/desired_zeitwerk_api.rb#98
50
+ sig { params(pack: ::ParsePackwerk::Package).returns(::String) }
51
+ def get_package_last_name(pack); end
52
+
53
+ # source://rubocop-packs//lib/rubocop/cop/packs/root_namespace_is_pack_name/desired_zeitwerk_api.rb#93
54
+ sig { returns(::Pathname) }
55
+ def root_pathname; end
56
+ end
57
+
58
+ # source://rubocop-packs//lib/rubocop/cop/packs/root_namespace_is_pack_name/desired_zeitwerk_api.rb#15
59
+ class RuboCop::Cop::Packs::RootNamespaceIsPackName::DesiredZeitwerkApi::NamespaceContext < ::T::Struct
60
+ const :current_fully_qualified_constant, ::String
61
+ const :current_namespace, ::String
62
+ const :expected_filepath, ::String
63
+ const :expected_namespace, ::String
64
+
65
+ class << self
66
+ # source://sorbet-runtime/0.5.9924/lib/types/struct.rb#13
67
+ def inherited(s); end
68
+ end
69
+ end
70
+
71
+ # source://rubocop-packs//lib/rubocop/cop/packwerk_lite/private.rb#5
72
+ module RuboCop::Cop::PackwerkLite; end
73
+
74
+ # This is a private class that represents API that we would prefer to be available somehow in Zeitwerk.
75
+ # However, the boundaries between systems (packwerk/zeitwerk, rubocop/zeitwerk) are poor in this class, so
76
+ # that would need to be separated prior to proposing any API changes in zeitwerk.
77
+ #
78
+ # source://rubocop-packs//lib/rubocop/cop/packwerk_lite/constant_resolver.rb#11
79
+ class RuboCop::Cop::PackwerkLite::ConstantResolver; end
80
+
81
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#5
82
+ module RuboCop::Packs
83
+ class << self
84
+ # source://rubocop-packs//lib/rubocop/packs.rb#135
85
+ sig { void }
86
+ def bust_cache!; end
87
+
88
+ # source://rubocop-packs//lib/rubocop/packs.rb#146
89
+ sig { returns(::RuboCop::Packs::Private::Configuration) }
90
+ def config; end
91
+
92
+ # @yield [config]
93
+ #
94
+ # source://rubocop-packs//lib/rubocop/packs.rb#141
95
+ sig { params(blk: T.proc.params(arg0: ::RuboCop::Packs::Private::Configuration).void).void }
96
+ def configure(&blk); end
97
+
98
+ # We can remove this function once package_protections is fully deprecated
99
+ #
100
+ # source://rubocop-packs//lib/rubocop/packs.rb#154
101
+ sig { params(rule: ::String).returns(T::Set[::String]) }
102
+ def exclude_for_rule(rule); end
103
+
104
+ # source://rubocop-packs//lib/rubocop/packs.rb#99
105
+ sig { params(root_pathname: ::String).returns(::String) }
106
+ def pack_based_rubocop_config(root_pathname: T.unsafe(nil)); end
107
+
108
+ # Ideally, this is API that is available to us via `rubocop` itself.
109
+ # That is: the ability to preserve the location of `.rubocop_todo.yml` files and associate
110
+ # exclusions with the closest ancestor `.rubocop_todo.yml`
111
+ #
112
+ # source://rubocop-packs//lib/rubocop/packs.rb#30
113
+ sig { params(packs: T::Array[::ParsePackwerk::Package], files: T::Array[::String]).void }
114
+ def regenerate_todo(packs: T.unsafe(nil), files: T.unsafe(nil)); end
115
+
116
+ # Ideally, this is API that is available to us via `rubocop` itself.
117
+ # That is: the ability to preserve the location of `.rubocop_todo.yml` files and associate
118
+ # exclusions with the closest ancestor `.rubocop_todo.yml`
119
+ #
120
+ # source://rubocop-packs//lib/rubocop/packs.rb#78
121
+ sig { params(packs: T::Array[::ParsePackwerk::Package]).void }
122
+ def set_default_rubocop_yml(packs:); end
123
+
124
+ # Note: when we add per-pack `.rubocop.yml` files, we'll want to add some validations here
125
+ # to restrict what cops are permitted to be configured in those files.
126
+ # We might also want further (configurable?) constraints *requiring* that the "permitted pack level cops" be specified explicitly.
127
+ #
128
+ # source://rubocop-packs//lib/rubocop/packs.rb#164
129
+ sig { returns(T::Array[::String]) }
130
+ def validate; end
131
+ end
132
+ end
133
+
134
+ # source://rubocop-packs//lib/rubocop/packs.rb#20
135
+ RuboCop::Packs::CONFIG = T.let(T.unsafe(nil), Hash)
136
+
137
+ # source://rubocop-packs//lib/rubocop/packs.rb#19
138
+ RuboCop::Packs::CONFIG_DEFAULT = T.let(T.unsafe(nil), Pathname)
139
+
140
+ # Because RuboCop doesn't yet support plugins, we have to monkey patch in a
141
+ # bit of our configuration.
142
+ #
143
+ # source://rubocop-packs//lib/rubocop/packs/inject.rb#10
144
+ module RuboCop::Packs::Inject
145
+ class << self
146
+ # source://rubocop-packs//lib/rubocop/packs/inject.rb#14
147
+ sig { void }
148
+ def defaults!; end
149
+ end
150
+ end
151
+
152
+ # source://rubocop-packs//lib/rubocop/packs.rb#16
153
+ RuboCop::Packs::PACK_LEVEL_RUBOCOP_TODO_YML = T.let(T.unsafe(nil), String)
154
+
155
+ # Pack-level rubocop and rubocop_todo YML files are named differently because they are not integrated
156
+ # into rubocop in the standard way. For example, we could call these the standard `.rubocop.yml` and
157
+ # `.rubocop_todo.yml`. However, this introduces a number of path relativity issues (https://docs.rubocop.org/rubocop/configuration.html#path-relativity)
158
+ # that make this approach not possible. Therefore, for pack level rubocops, we name them in a way that mirrors packwerk `package_todo.yml` files
159
+ # for consistency and to ensure that thes are not read by rubocop except via the ERB templating mechanism.
160
+ #
161
+ # source://rubocop-packs//lib/rubocop/packs.rb#15
162
+ RuboCop::Packs::PACK_LEVEL_RUBOCOP_YML = T.let(T.unsafe(nil), String)
163
+
164
+ # source://rubocop-packs//lib/rubocop/packs.rb#18
165
+ RuboCop::Packs::PROJECT_ROOT = T.let(T.unsafe(nil), Pathname)
166
+
167
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#6
168
+ module RuboCop::Packs::Private
169
+ class << self
170
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#13
171
+ sig { void }
172
+ def bust_cache!; end
173
+
174
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#107
175
+ sig { params(rule: ::String).returns(T::Set[::String]) }
176
+ def exclude_for_rule(rule); end
177
+
178
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#152
179
+ sig { params(args: T.untyped).void }
180
+ def execute_rubocop(args); end
181
+
182
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#19
183
+ sig { void }
184
+ def load_client_configuration; end
185
+
186
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#157
187
+ sig do
188
+ params(
189
+ paths: T::Array[::String],
190
+ cop_names: T::Array[::String]
191
+ ).returns(T::Array[::RuboCop::Packs::Private::Offense])
192
+ end
193
+ def offenses_for(paths:, cop_names:); end
194
+
195
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#29
196
+ sig { returns(T::Array[T::Hash[T.untyped, T.untyped]]) }
197
+ def rubocop_todo_ymls; end
198
+
199
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#126
200
+ sig { params(package: ::ParsePackwerk::Package).returns(T::Array[::String]) }
201
+ def validate_failure_mode_strict(package); end
202
+
203
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#40
204
+ sig { params(package: ::ParsePackwerk::Package).returns(T::Array[::String]) }
205
+ def validate_rubocop_todo_yml(package); end
206
+
207
+ # source://rubocop-packs//lib/rubocop/packs/private.rb#75
208
+ sig { params(package: ::ParsePackwerk::Package).returns(T::Array[::String]) }
209
+ def validate_rubocop_yml(package); end
210
+ end
211
+ end
212
+
213
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#7
214
+ class RuboCop::Packs::Private::Configuration
215
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#20
216
+ sig { void }
217
+ def initialize; end
218
+
219
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#27
220
+ sig { void }
221
+ def bust_cache!; end
222
+
223
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#17
224
+ sig { returns(T::Array[::String]) }
225
+ def globally_permitted_namespaces; end
226
+
227
+ # @return [Array<String>]
228
+ #
229
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#17
230
+ def globally_permitted_namespaces=(_arg0); end
231
+
232
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#11
233
+ sig { returns(T::Array[::String]) }
234
+ def permitted_pack_level_cops; end
235
+
236
+ # @return [Array<String>]
237
+ #
238
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#11
239
+ def permitted_pack_level_cops=(_arg0); end
240
+
241
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#14
242
+ sig { returns(T::Array[::String]) }
243
+ def required_pack_level_cops; end
244
+
245
+ # @return [Array<String>]
246
+ #
247
+ # source://rubocop-packs//lib/rubocop/packs/private/configuration.rb#14
248
+ def required_pack_level_cops=(_arg0); end
249
+ end
250
+
251
+ # source://rubocop-packs//lib/rubocop/packs/private/offense.rb#6
252
+ class RuboCop::Packs::Private::Offense < ::T::Struct
253
+ const :cop_name, ::String
254
+ const :filepath, ::String
255
+
256
+ # source://rubocop-packs//lib/rubocop/packs/private/offense.rb#13
257
+ sig { returns(::ParsePackwerk::Package) }
258
+ def pack; end
259
+
260
+ class << self
261
+ # source://sorbet-runtime/0.5.9924/lib/types/struct.rb#13
262
+ def inherited(s); end
263
+ end
264
+ end
265
+
266
+ # See docs/packwerk_lite.md
267
+ #
268
+ # source://rubocop-packs//lib/rubocop/packwerk_lite.rb#11
269
+ module RuboCop::PackwerkLite; end
270
+
271
+ # source://rubocop-packs//lib/rubocop/packwerk_lite.rb#12
272
+ class RuboCop::PackwerkLite::Error < ::StandardError; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pack_stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gusto Engineers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-12 00:00:00.000000000 Z
11
+ date: 2022-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: code_teams
@@ -189,13 +189,14 @@ files:
189
189
  - lib/pack_stats/tag.rb
190
190
  - lib/pack_stats/tags.rb
191
191
  - sorbet/config
192
+ - sorbet/rbi/gems/ast@2.4.2.rbi
192
193
  - sorbet/rbi/gems/code_ownership@1.28.0.rbi
193
194
  - sorbet/rbi/gems/code_teams@1.0.0.rbi
194
195
  - sorbet/rbi/gems/dogapi@1.45.0.rbi
195
196
  - sorbet/rbi/gems/manual.rbi
196
- - sorbet/rbi/gems/parse_packwerk@0.14.0.rbi
197
+ - sorbet/rbi/gems/parse_packwerk@0.16.0.rbi
197
198
  - sorbet/rbi/gems/rspec@3.10.0.rbi
198
- - sorbet/rbi/gems/rubocop-packs@0.0.20.rbi
199
+ - sorbet/rbi/gems/rubocop-packs@0.0.30.rbi
199
200
  - sorbet/rbi/todo.rbi
200
201
  homepage: https://github.com/rubyatscale/pack_stats
201
202
  licenses:
@@ -1,141 +0,0 @@
1
- # typed: true
2
-
3
- # DO NOT EDIT MANUALLY
4
- # This is an autogenerated file for types exported from the `rubocop-packs` gem.
5
- # Please instead update this file by running `bin/tapioca gem rubocop-packs`.
6
-
7
- module RuboCop; end
8
- module RuboCop::Cop; end
9
- module RuboCop::Cop::Packs; end
10
-
11
- class RuboCop::Cop::Packs::RootNamespaceIsPackName::DesiredZeitwerkApi
12
- sig do
13
- params(
14
- relative_filename: ::String,
15
- package_for_path: ::ParsePackwerk::Package
16
- ).returns(T.nilable(::RuboCop::Cop::Packs::RootNamespaceIsPackName::DesiredZeitwerkApi::NamespaceContext))
17
- end
18
- def for_file(relative_filename, package_for_path); end
19
-
20
- sig { params(pack: ::ParsePackwerk::Package).returns(::String) }
21
- def get_pack_based_namespace(pack); end
22
-
23
- private
24
-
25
- sig { params(remaining_file_path: ::String, package_name: ::String).returns(::String) }
26
- def get_actual_namespace(remaining_file_path, package_name); end
27
-
28
- sig { params(pack: ::ParsePackwerk::Package).returns(::String) }
29
- def get_package_last_name(pack); end
30
-
31
- sig { returns(::Pathname) }
32
- def root_pathname; end
33
- end
34
-
35
- class RuboCop::Cop::Packs::RootNamespaceIsPackName::DesiredZeitwerkApi::NamespaceContext < ::T::Struct
36
- const :current_fully_qualified_constant, ::String
37
- const :current_namespace, ::String
38
- const :expected_filepath, ::String
39
- const :expected_namespace, ::String
40
-
41
- class << self
42
- def inherited(s); end
43
- end
44
- end
45
-
46
- module RuboCop::Cop::PackwerkLite; end
47
- class RuboCop::Cop::PackwerkLite::ConstantResolver; end
48
-
49
- module RuboCop::Packs
50
- class << self
51
- sig { params(packs: T::Array[::ParsePackwerk::Package]).void }
52
- def auto_generate_rubocop_todo(packs:); end
53
-
54
- sig { void }
55
- def bust_cache!; end
56
-
57
- sig { returns(::RuboCop::Packs::Private::Configuration) }
58
- def config; end
59
-
60
- sig { params(blk: T.proc.params(arg0: ::RuboCop::Packs::Private::Configuration).void).void }
61
- def configure(&blk); end
62
-
63
- sig { params(rule: ::String).returns(T::Set[::String]) }
64
- def exclude_for_rule(rule); end
65
-
66
- sig { params(root_pathname: ::String).returns(::String) }
67
- def pack_based_rubocop_config(root_pathname: T.unsafe(nil)); end
68
-
69
- sig { params(packs: T::Array[::ParsePackwerk::Package]).void }
70
- def set_default_rubocop_yml(packs:); end
71
-
72
- sig { returns(T::Array[::String]) }
73
- def validate; end
74
- end
75
- end
76
-
77
- RuboCop::Packs::CONFIG = T.let(T.unsafe(nil), Hash)
78
- RuboCop::Packs::CONFIG_DEFAULT = T.let(T.unsafe(nil), Pathname)
79
- class RuboCop::Packs::Error < ::StandardError; end
80
-
81
- module RuboCop::Packs::Inject
82
- class << self
83
- sig { void }
84
- def defaults!; end
85
- end
86
- end
87
-
88
- RuboCop::Packs::PACK_LEVEL_RUBOCOP_TODO_YML = T.let(T.unsafe(nil), String)
89
- RuboCop::Packs::PACK_LEVEL_RUBOCOP_YML = T.let(T.unsafe(nil), String)
90
- RuboCop::Packs::PROJECT_ROOT = T.let(T.unsafe(nil), Pathname)
91
-
92
- module RuboCop::Packs::Private
93
- class << self
94
- sig { void }
95
- def bust_cache!; end
96
-
97
- sig { params(rule: ::String).returns(T::Set[::String]) }
98
- def exclude_for_rule(rule); end
99
-
100
- sig { void }
101
- def load_client_configuration; end
102
-
103
- sig { returns(T::Array[T::Hash[T.untyped, T.untyped]]) }
104
- def rubocop_todo_ymls; end
105
-
106
- sig { params(package: ::ParsePackwerk::Package).returns(T::Array[::String]) }
107
- def validate_failure_mode_strict(package); end
108
-
109
- sig { params(package: ::ParsePackwerk::Package).returns(T::Array[::String]) }
110
- def validate_rubocop_todo_yml(package); end
111
-
112
- sig { params(package: ::ParsePackwerk::Package).returns(T::Array[::String]) }
113
- def validate_rubocop_yml(package); end
114
- end
115
- end
116
-
117
- class RuboCop::Packs::Private::Configuration
118
- sig { void }
119
- def initialize; end
120
-
121
- sig { void }
122
- def bust_cache!; end
123
-
124
- sig { returns(T::Array[::String]) }
125
- def globally_permitted_namespaces; end
126
-
127
- def globally_permitted_namespaces=(_arg0); end
128
-
129
- sig { returns(T::Array[::String]) }
130
- def permitted_pack_level_cops; end
131
-
132
- def permitted_pack_level_cops=(_arg0); end
133
-
134
- sig { returns(T::Array[::String]) }
135
- def required_pack_level_cops; end
136
-
137
- def required_pack_level_cops=(_arg0); end
138
- end
139
-
140
- module RuboCop::PackwerkLite; end
141
- class RuboCop::PackwerkLite::Error < ::StandardError; end