leftovers 0.4.0 → 0.5.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 +4 -4
- data/CHANGELOG.md +22 -0
- data/README.md +37 -4
- data/docs/Configuration.md +75 -11
- data/leftovers.gemspec +1 -0
- data/lib/config/actioncable.yml +4 -0
- data/lib/config/actionmailer.yml +22 -0
- data/lib/config/actionpack.yml +190 -0
- data/lib/config/actionview.yml +64 -0
- data/lib/config/activejob.yml +29 -0
- data/lib/config/activemodel.yml +74 -0
- data/lib/config/activerecord.yml +179 -0
- data/lib/config/activesupport.yml +98 -0
- data/lib/config/haml.yml +2 -0
- data/lib/config/rails.yml +11 -450
- data/lib/config/ruby.yml +6 -0
- data/lib/leftovers/ast/node.rb +18 -4
- data/lib/leftovers/cli.rb +13 -4
- data/lib/leftovers/collector.rb +2 -1
- data/lib/leftovers/config.rb +12 -0
- data/lib/leftovers/config_validator/schema_hash.rb +57 -11
- data/lib/leftovers/definition.rb +6 -6
- data/lib/leftovers/definition_node.rb +36 -0
- data/lib/leftovers/definition_set.rb +15 -8
- data/lib/leftovers/file.rb +2 -3
- data/lib/leftovers/file_collector.rb +10 -5
- data/lib/leftovers/matcher_builders/node.rb +2 -0
- data/lib/leftovers/matcher_builders/node_has_argument.rb +11 -7
- data/lib/leftovers/matcher_builders/node_has_keyword_argument.rb +14 -10
- data/lib/leftovers/matcher_builders/node_has_positional_argument.rb +17 -13
- data/lib/leftovers/matcher_builders/node_has_receiver.rb +15 -0
- data/lib/leftovers/matcher_builders/node_type.rb +7 -6
- data/lib/leftovers/matcher_builders/node_value.rb +42 -0
- data/lib/leftovers/matcher_builders.rb +3 -2
- data/lib/leftovers/matchers/node_has_any_positional_argument_with_value.rb +4 -1
- data/lib/leftovers/matchers/node_has_positional_argument.rb +0 -4
- data/lib/leftovers/matchers/node_has_receiver.rb +20 -0
- data/lib/leftovers/matchers/predicate.rb +19 -0
- data/lib/leftovers/matchers.rb +2 -0
- data/lib/leftovers/merged_config.rb +28 -1
- data/lib/leftovers/reporter.rb +56 -4
- data/lib/leftovers/todo_reporter.rb +127 -0
- data/lib/leftovers/value_processors/each_for_definition_set.rb +2 -6
- data/lib/leftovers/value_processors/return_definition.rb +5 -3
- data/lib/leftovers/version.rb +1 -1
- data/lib/leftovers.rb +94 -96
- metadata +31 -5
- data/lib/leftovers/matcher_builders/argument_node_value.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d666abea8ce822697d18bd1b07a31684e7e85b81d3e3184c097438f0f83d89f5
|
4
|
+
data.tar.gz: 16c80ab37e2073f7738e40f8db24c628d688d9640cc5c00d0864d5da4f207bb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f57aa2dc36e1c980a05afb8a4feb156f34a5a91b2486713d118d161b41f164c0afc73e05fc79dc693b550a14a17e4510ac57a0be84b6c97cc6e5f3df29b940c3
|
7
|
+
data.tar.gz: 9aa8746deda0bc64cdd2c9f476396d7e01859cf81ebbdf982fbab484bfde0c0d14e9dbc636bb5c5fab3a46119fab4531424e3cbdcf4ac3dc71a043eb671e6808
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
# v0.5.0
|
2
|
+
- `has_receiver:` will match the receiver for methods and the namespace for constants.
|
3
|
+
- `has_value_type:` is now `has_value: type:`
|
4
|
+
- `has_value:` can be nested with `at:` and `has_value:`.
|
5
|
+
- `has_argument:` can be given `at:` with `'*'` or `'**'` which matches all positional arguments or keyword arguments respectively
|
6
|
+
- the rails.yml config has been broken up into e.g. activerecord, actionpack, etc
|
7
|
+
- `haml_paths:` and `erb_paths:` are now configurable.
|
8
|
+
- `type:` can match on `'Array'`, `'Hash'`, and `'Proc'` literals.
|
9
|
+
- rails.yml config determines which `scope` is which by its shape rather than its path: (ActiveRecord#scope has a proc as the second parameter)
|
10
|
+
- `--write--todo` now correctly handles grouped definitions (like activemodel attributes)
|
11
|
+
|
12
|
+
# v0.4.4
|
13
|
+
- don't hard-wrap the --write-todo instructions it looks weird
|
14
|
+
|
15
|
+
# v0.4.3
|
16
|
+
- add --write-todo so you can add this to your project without
|
17
|
+
immediately fixing everything.
|
18
|
+
|
19
|
+
# v0.4.2
|
20
|
+
- Make sorbet happy with this as a dependency
|
21
|
+
# v0.4.1
|
22
|
+
- add `test_only:` to mark methods/constants/assignments as test_only in the config rather than just with magic comments
|
1
23
|
|
2
24
|
# v0.4.0
|
3
25
|
- add `requires:` to .leftovers.yml config to e.g. load inflections in a different place than `config/initializers/inflections`
|
data/README.md
CHANGED
@@ -56,8 +56,38 @@ lib/hello_world.rb:18:6 another_tested_unused_method def another_tested_unused_m
|
|
56
56
|
Not directly called at all:
|
57
57
|
lib/hello_world.rb:6:6 generated_method= attr_accessor :generated_method
|
58
58
|
lib/hello_world.rb:6:6 generated_method attr_accessor :generated_method
|
59
|
+
|
60
|
+
how to resolve: https://github.com/robotdana/leftovers/tree/main/Readme.md#how_to_resolve
|
59
61
|
```
|
60
62
|
|
63
|
+
if there is an overwhelming number of results, try using [`--write-todo`](#write-todo)
|
64
|
+
|
65
|
+
## How to resolve
|
66
|
+
|
67
|
+
When running `leftovers` you'll be given a list of method, constant, and variable definitions it thinks are unused. Now what?
|
68
|
+
|
69
|
+
they were unintentionally left when removing their calls:
|
70
|
+
- remove their definitions. (they're still there in your git etc history if you want them back)
|
71
|
+
|
72
|
+
they are called dynamically:
|
73
|
+
- define how they're called dynamically in the [.leftovers.yml](#configuration-file); or
|
74
|
+
- mark the calls with [`# leftovers:call my_unused_method`](#leftovers-call); or
|
75
|
+
- mark the definition with [`# leftovers:keep`](#leftovers-keep)
|
76
|
+
|
77
|
+
they're defined intentionally to only be used by tests:
|
78
|
+
- add [`# leftovers:test_only`](#leftovers-test-only)
|
79
|
+
|
80
|
+
they're from a file that shouldn't be checked by leftovers:
|
81
|
+
- add the paths to the [`exclude_paths:`](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md#exclude_paths) list in the [.leftovers.yml](#configuration-file) file
|
82
|
+
|
83
|
+
if there are too many to address when first adding leftovers to your project, try running [`leftovers --write-todo`](#write-todo),
|
84
|
+
|
85
|
+
### --write-todo
|
86
|
+
|
87
|
+
running `leftovers --write-todo` will generate a supplemental configuration file allowing all the currently detected uncalled definitions, which will be read on subsequent runs of `leftovers` without alerting any of the items mentioned in it.
|
88
|
+
|
89
|
+
commit this file so you/your team can gradually address these items while still having leftovers alert you to any newly unused items.
|
90
|
+
|
61
91
|
## Magic comments
|
62
92
|
|
63
93
|
### `# leftovers:keep`
|
@@ -72,16 +102,16 @@ class MyClass
|
|
72
102
|
end
|
73
103
|
```
|
74
104
|
This would report `MyClass` is unused, but not my_method
|
75
|
-
To do this for all definitions of this name, add the name
|
105
|
+
To do this for all definitions of this name, instead of adding a comment, add the name to the [`keep:`](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md#keep) list in the [configuration file](#configuration-file).
|
76
106
|
|
77
|
-
### `# leftovers:
|
107
|
+
### `# leftovers:test_only`
|
78
108
|
_aliases `leftovers:for_test`, `leftovers:for_tests`, `leftovers:test`, `leftovers:tests`, `leftovers:testing`_
|
79
109
|
|
80
|
-
To mark a definition from a non-test dir, as intentionally only used by tests, use `leftovers:
|
110
|
+
To mark a definition from a non-test dir, as intentionally only used by tests, use `leftovers:test_only`
|
81
111
|
```ruby
|
82
112
|
# app/my_class.rb
|
83
113
|
class MyClass
|
84
|
-
def my_method # leftovers:
|
114
|
+
def my_method # leftovers:test_only
|
85
115
|
true
|
86
116
|
end
|
87
117
|
end
|
@@ -95,6 +125,8 @@ end
|
|
95
125
|
|
96
126
|
This would consider `my_method` to be used, even though it is only called by tests.
|
97
127
|
|
128
|
+
To do this for all definitions of this name, instead of adding a comment, add the name to the [`test_only:`](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md#test_only) list in the [configuration file](#configuration-file).
|
129
|
+
|
98
130
|
### `# leftovers:call`
|
99
131
|
_aliases `leftovers:calls`_
|
100
132
|
To mark a dynamic call that doesn't use literal values, use `leftovers:call` with the method name listed
|
@@ -116,6 +148,7 @@ Its presence is optional and all of these settings are optional.
|
|
116
148
|
- [`requires:`](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md#requires)
|
117
149
|
- [`gems:`](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md#gems)
|
118
150
|
- [`keep:`](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md#keep)
|
151
|
+
- [`test_only:`](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md#test_only)
|
119
152
|
- [`dynamic:`](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md#dynamic)
|
120
153
|
|
121
154
|
see the [complete config documentation](https://github.com/robotdana/leftovers/tree/main/docs/Configuration.md) for details.
|
data/docs/Configuration.md
CHANGED
@@ -6,9 +6,12 @@ Its presence is optional and all of these settings are optional.
|
|
6
6
|
- [`include_paths:`](#include_paths)
|
7
7
|
- [`exclude_paths:`](#exclude_paths)
|
8
8
|
- [`test_paths:`](#test_paths)
|
9
|
+
- [`haml_paths:`](#haml_paths)
|
10
|
+
- [`erb_paths:`](#erb_paths)
|
9
11
|
- [`requires:`](#requires)
|
10
12
|
- [`gems:`](#gems)
|
11
13
|
- [`keep:`](#keep)
|
14
|
+
- [`test_only:](#test_only)
|
12
15
|
- [`dynamic:`](#dynamic)
|
13
16
|
|
14
17
|
see the [built in config files](https://github.com/robotdana/leftovers/tree/main/lib/config) or [this repo's own config](https://github.com/robotdana/leftovers/tree/main/.leftovers.yml) for examples.
|
@@ -46,7 +49,7 @@ exclude_paths:
|
|
46
49
|
|
47
50
|
Arrays are not necessary for single values
|
48
51
|
|
49
|
-
## `requires:`
|
52
|
+
## `requires:`
|
50
53
|
_alias `require`_
|
51
54
|
|
52
55
|
List filenames/paths that you want to include
|
@@ -77,6 +80,30 @@ test_paths:
|
|
77
80
|
|
78
81
|
Arrays are not necessary for single values
|
79
82
|
|
83
|
+
## `haml_paths:`
|
84
|
+
|
85
|
+
list filenames/paths of test directories that are in the haml format
|
86
|
+
Defined using the [.gitignore pattern format](https://git-scm.com/docs/gitignore#_pattern_format)
|
87
|
+
|
88
|
+
```yml
|
89
|
+
haml_paths:
|
90
|
+
- '*.haml'
|
91
|
+
```
|
92
|
+
|
93
|
+
Arrays are not necessary for single values. `*.haml` is recognized by default
|
94
|
+
|
95
|
+
## `erb_paths:`
|
96
|
+
|
97
|
+
list filenames/paths of test directories that are in the erb format
|
98
|
+
Defined using the [.gitignore pattern format](https://git-scm.com/docs/gitignore#_pattern_format)
|
99
|
+
|
100
|
+
```yml
|
101
|
+
erb_paths:
|
102
|
+
- '*.erb'
|
103
|
+
```
|
104
|
+
|
105
|
+
Arrays are not necessary for single values. `*.erb` is recognized by default
|
106
|
+
|
80
107
|
## `gems:`
|
81
108
|
_alias `gem:`_
|
82
109
|
|
@@ -104,6 +131,7 @@ Each entry can be a string (an exact match for a method, constant, or variable n
|
|
104
131
|
- [`matches:`](#matches) (can't be used in the same entry as `has_prefix:` or `has_suffix:`)
|
105
132
|
- [`paths:`](#paths)
|
106
133
|
- [`has_arguments:`](#has_arguments)
|
134
|
+
- [`has_receiver:`](#has_receiver)
|
107
135
|
- [`unless`](#unless)
|
108
136
|
|
109
137
|
Arrays are not necessary for single values
|
@@ -120,6 +148,34 @@ keep:
|
|
120
148
|
|
121
149
|
Alternatively, you can mark method/constants/variables in-place using [magic comments](https://github.com/robotdana/leftovers/tree/main/README.md#magic-comments).
|
122
150
|
|
151
|
+
## `test_only:`
|
152
|
+
|
153
|
+
This is a list of methods/constants/variables that are ok to be defined outside of [test paths](#test_paths), but only used within test paths, maybe because they're your public api, or convenience methods for tests etc.
|
154
|
+
|
155
|
+
Each entry can be a string (an exact match for a method, constant, or variable name that includes the sigil), or have at least one of the following properties:
|
156
|
+
- [`names:`](#names)
|
157
|
+
or the properties from `names:`
|
158
|
+
- [`has_prefix:`](#has_prefix)
|
159
|
+
- [`has_suffix:`](#has_suffix)
|
160
|
+
- [`matches:`](#matches) (can't be used in the same entry as `has_prefix:` or `has_suffix:`)
|
161
|
+
- [`paths:`](#paths)
|
162
|
+
- [`has_arguments:`](#has_arguments)
|
163
|
+
- [`unless`](#unless)
|
164
|
+
|
165
|
+
Arrays are not necessary for single values
|
166
|
+
|
167
|
+
example from rails.yml
|
168
|
+
```yml
|
169
|
+
test_only:
|
170
|
+
- APP_PATH
|
171
|
+
- ssl_configured?
|
172
|
+
- has_suffix: Helper
|
173
|
+
path: /app/helpers
|
174
|
+
...
|
175
|
+
```
|
176
|
+
|
177
|
+
Alternatively, you can mark method/constants/variables in-place using [magic comments](https://github.com/robotdana/leftovers/tree/main/README.md#magic-comments).
|
178
|
+
|
123
179
|
## `dynamic:`
|
124
180
|
|
125
181
|
This is a list of methods, constants, or variables whose called arguments or assigned value/s are used to dynamically `call:` or define (`define:`) other methods, constants, or variables
|
@@ -132,6 +188,7 @@ Each entry must have at least one of the following properties to restrict which
|
|
132
188
|
- [`matches:`](#matches)
|
133
189
|
- [`paths:`](#paths)
|
134
190
|
- [`has_arguments:`](#has_arguments)
|
191
|
+
- [`has_receiver:`](#has_receiver)
|
135
192
|
- [`unless`](#unless)
|
136
193
|
|
137
194
|
And must have one or both of
|
@@ -294,8 +351,7 @@ and when used in:
|
|
294
351
|
|
295
352
|
It can have any of these properties:
|
296
353
|
- [`at:`](#at)
|
297
|
-
- [`has_value:`](#
|
298
|
-
- [`has_value_type:`](#has_value_type)
|
354
|
+
- [`has_value:`](#has_value_has_receiver)
|
299
355
|
|
300
356
|
Arrays are not necessary for single values and if the rule contains only `at:` it can be omitted, and the values moved up a level
|
301
357
|
|
@@ -311,8 +367,7 @@ The method call/constant variable/assignment will be considered matching if it h
|
|
311
367
|
|
312
368
|
It can have any of these properties:
|
313
369
|
- [`at:`](#at)
|
314
|
-
- [`has_value:`](#
|
315
|
-
- [`has_value_type:`](#has_value_type) # TODO
|
370
|
+
- [`has_value:`](#has_value_has_receiver)
|
316
371
|
|
317
372
|
Arrays are not necessary for single values and if the rule contains only `at:` it can be omitted, and the values moved up a level
|
318
373
|
|
@@ -354,9 +409,9 @@ Each entry can be any of:
|
|
354
409
|
|
355
410
|
Arrays are not necessary for single values
|
356
411
|
|
357
|
-
## `has_value:`
|
412
|
+
## `has_value:`, `has_receiver:`
|
358
413
|
|
359
|
-
filter [`arguments:`](#arguments), [`has_arguments:`](#has_arguments), and [`keywords:`](#keywords), by the argument/assigned value
|
414
|
+
filter [`arguments:`](#arguments), [`has_arguments:`](#has_arguments), and [`keywords:`](#keywords), by the argument/assigned/receiver value
|
360
415
|
|
361
416
|
Each entry can be one of
|
362
417
|
- `true`, `false`, `nil`, or an Integer. matches the literal value
|
@@ -365,16 +420,25 @@ Each entry can be one of
|
|
365
420
|
- [`has_prefix:`](#has_prefix)
|
366
421
|
- [`has_suffix:`](#has_suffix)
|
367
422
|
- [`matches:`](#matches) (this can't be used in the same entry as `has_prefix:` or `has_suffix:`)
|
423
|
+
- or have at least one of the following properties to match within an array or hash:
|
424
|
+
- [`at`](#at)
|
425
|
+
- [`has_value`](#has_value_has_receiver)
|
426
|
+
- or have the following property to match the value type
|
427
|
+
- [`type`](#type)
|
428
|
+
- or have the following property to match the receiver
|
429
|
+
- [`has_receiver`](#has_value_has_receiver)
|
368
430
|
|
369
|
-
## `
|
431
|
+
## `type:`
|
370
432
|
|
371
|
-
Filter [`
|
433
|
+
Filter [`has_value`](#has_value_has_receiver), by the argument/assigned value type
|
372
434
|
|
373
435
|
Each entry can be one of
|
374
436
|
- `'String'`
|
375
437
|
- `'Symbol'`
|
376
438
|
- `'Integer'`
|
377
439
|
- `'Float'`
|
440
|
+
- `'Array'`
|
441
|
+
- `'Hash'`
|
378
442
|
|
379
443
|
Arrays are not necessary for single values
|
380
444
|
|
@@ -584,9 +648,9 @@ Can be used in the [`transforms:`](#transforms) list (or anywhere `transforms:`
|
|
584
648
|
if used in a hash `true` can be used as a placeholder value
|
585
649
|
|
586
650
|
the incoming value will be transformed using the [active_support String core extensions](https://edgeguides.rubyonrails.org/active_support_core_extensions.html#inflections)
|
587
|
-
and if using [gems:](#gems) with `
|
651
|
+
and if using [gems:](#gems) with `activesupport` or `rails` then your `config/initializers/inflections.rb` will be loaded. if you have inflections in another file, then supply that to [`requires:`](#requires).
|
588
652
|
|
589
|
-
If the `
|
653
|
+
If the `activesupport` gem is not available this will raise an error.
|
590
654
|
|
591
655
|
## `unless:`
|
592
656
|
|
data/leftovers.gemspec
CHANGED
@@ -42,6 +42,7 @@ Gem::Specification.new do |spec|
|
|
42
42
|
spec.add_development_dependency 'rubocop-rspec', '~> 1.44.1'
|
43
43
|
spec.add_development_dependency 'simplecov', '>= 0.18.5'
|
44
44
|
spec.add_development_dependency 'simplecov-console'
|
45
|
+
spec.add_development_dependency 'timecop'
|
45
46
|
spec.add_development_dependency 'tty_string', '>= 0.2.1'
|
46
47
|
|
47
48
|
spec.add_development_dependency 'spellr', '>= 0.8.1'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# THIS IS INCOMPLETE (you can help by expanding it)
|
2
|
+
# rails is _really complicated_ and has a lot of magic which calls methods for you.
|
3
|
+
# some is currently impossible to handle (with_options).
|
4
|
+
# Some is just corners of rails I haven't hit yet.
|
5
|
+
keep:
|
6
|
+
- has_suffix: Preview
|
7
|
+
path: '**/mailers/previews/**/*_preview.rb'
|
8
|
+
- delivering_email
|
9
|
+
- delivered_email
|
10
|
+
|
11
|
+
dynamic:
|
12
|
+
names:
|
13
|
+
- deliver_now
|
14
|
+
- deliver_later
|
15
|
+
calls:
|
16
|
+
value:
|
17
|
+
deliver
|
18
|
+
names:
|
19
|
+
- before_action
|
20
|
+
- after_action
|
21
|
+
- around_action
|
22
|
+
calls: ['*', if, unless]
|
@@ -0,0 +1,190 @@
|
|
1
|
+
# THIS IS INCOMPLETE (you can help by expanding it)
|
2
|
+
# rails is _really complicated_ and has a lot of magic which calls methods for you.
|
3
|
+
# some is currently impossible to handle (with_options).
|
4
|
+
# Some is just corners of rails I haven't hit yet.
|
5
|
+
|
6
|
+
include_paths:
|
7
|
+
- '*.rjs'
|
8
|
+
- '*.rhtml'
|
9
|
+
|
10
|
+
erb_paths:
|
11
|
+
- '*.rjs'
|
12
|
+
- '*.rhtml'
|
13
|
+
|
14
|
+
keep:
|
15
|
+
- ssl_configured? # ApplicationController
|
16
|
+
- default_url_options # called by url_for
|
17
|
+
- matches? # called by route constraints
|
18
|
+
- has_suffix: Helper
|
19
|
+
path: /app/helpers
|
20
|
+
|
21
|
+
dynamic:
|
22
|
+
- names:
|
23
|
+
- after_action
|
24
|
+
- append_after_action
|
25
|
+
- append_around_action
|
26
|
+
- append_before_action
|
27
|
+
- around_action
|
28
|
+
- before_action
|
29
|
+
- prepend_after_action
|
30
|
+
- prepend_around_action
|
31
|
+
- prepend_before_action
|
32
|
+
- skip_before_action
|
33
|
+
- skip_after_action
|
34
|
+
- skip_around_action
|
35
|
+
calls:
|
36
|
+
- arguments: ['*', if, unless]
|
37
|
+
- name: scope
|
38
|
+
unless:
|
39
|
+
has_argument:
|
40
|
+
at: 1
|
41
|
+
has_value:
|
42
|
+
type: Proc
|
43
|
+
calls:
|
44
|
+
argument: module # routes
|
45
|
+
camelize: true
|
46
|
+
split: '::'
|
47
|
+
- name: namespace
|
48
|
+
calls:
|
49
|
+
- argument: 0
|
50
|
+
camelize: true
|
51
|
+
split: '::'
|
52
|
+
- name:
|
53
|
+
- rescue_from
|
54
|
+
calls:
|
55
|
+
- argument: [1, with]
|
56
|
+
- name:
|
57
|
+
- match
|
58
|
+
- delete
|
59
|
+
- get
|
60
|
+
- patch
|
61
|
+
- post
|
62
|
+
- put
|
63
|
+
- root
|
64
|
+
calls:
|
65
|
+
- arguments: [0, action]
|
66
|
+
- argument: '**'
|
67
|
+
delete_before: '#'
|
68
|
+
- argument: '**'
|
69
|
+
delete_after: '#'
|
70
|
+
camelize: true
|
71
|
+
add_suffix: Controller
|
72
|
+
split: '::'
|
73
|
+
- name:
|
74
|
+
- resource
|
75
|
+
- resources
|
76
|
+
calls:
|
77
|
+
- argument: only
|
78
|
+
- argument: controller
|
79
|
+
camelize: true
|
80
|
+
add_suffix: Controller
|
81
|
+
split: '::'
|
82
|
+
- name:
|
83
|
+
- resource
|
84
|
+
- resources
|
85
|
+
unless:
|
86
|
+
has_argument:
|
87
|
+
- at: only
|
88
|
+
- at: except
|
89
|
+
has_value: index
|
90
|
+
- at: except
|
91
|
+
has_value:
|
92
|
+
at: '*'
|
93
|
+
has_value: index
|
94
|
+
calls:
|
95
|
+
- value: index
|
96
|
+
- name:
|
97
|
+
- resource
|
98
|
+
- resources
|
99
|
+
unless:
|
100
|
+
has_argument:
|
101
|
+
- at: only
|
102
|
+
- at: except
|
103
|
+
has_value: new
|
104
|
+
- at: except
|
105
|
+
has_value:
|
106
|
+
at: '*'
|
107
|
+
has_value: new
|
108
|
+
calls:
|
109
|
+
- value: new
|
110
|
+
- name:
|
111
|
+
- resource
|
112
|
+
- resources
|
113
|
+
unless:
|
114
|
+
has_argument:
|
115
|
+
- at: only
|
116
|
+
- at: except
|
117
|
+
has_value: create
|
118
|
+
- at: except
|
119
|
+
has_value:
|
120
|
+
at: '*'
|
121
|
+
has_value: create
|
122
|
+
calls:
|
123
|
+
- value: create
|
124
|
+
- name:
|
125
|
+
- resource
|
126
|
+
- resources
|
127
|
+
unless:
|
128
|
+
has_argument:
|
129
|
+
- at: only
|
130
|
+
- at: except
|
131
|
+
has_value: edit
|
132
|
+
- at: except
|
133
|
+
has_value:
|
134
|
+
at: '*'
|
135
|
+
has_value: edit
|
136
|
+
calls:
|
137
|
+
- value: edit
|
138
|
+
- name:
|
139
|
+
- resource
|
140
|
+
- resources
|
141
|
+
unless:
|
142
|
+
has_argument:
|
143
|
+
- at: only
|
144
|
+
- at: except
|
145
|
+
has_value: update
|
146
|
+
- at: except
|
147
|
+
has_value:
|
148
|
+
at: '*'
|
149
|
+
has_value: update
|
150
|
+
calls:
|
151
|
+
- value: update
|
152
|
+
- name:
|
153
|
+
- resource
|
154
|
+
- resources
|
155
|
+
unless:
|
156
|
+
has_argument:
|
157
|
+
- at: only
|
158
|
+
- at: except
|
159
|
+
has_value: destroy
|
160
|
+
- at: except
|
161
|
+
has_value:
|
162
|
+
at: '*'
|
163
|
+
has_value: destroy
|
164
|
+
calls:
|
165
|
+
- value: destroy
|
166
|
+
- name:
|
167
|
+
- resources
|
168
|
+
- controller
|
169
|
+
- namespace
|
170
|
+
calls:
|
171
|
+
- argument: 0
|
172
|
+
camelize: true
|
173
|
+
add_suffix: Controller
|
174
|
+
split: '::'
|
175
|
+
- name: resource
|
176
|
+
calls:
|
177
|
+
- argument: 0
|
178
|
+
camelize: true
|
179
|
+
pluralize: true
|
180
|
+
add_suffix: Controller
|
181
|
+
split: '::'
|
182
|
+
- name: permit
|
183
|
+
calls:
|
184
|
+
arguments: ['*', '**']
|
185
|
+
keywords: '**'
|
186
|
+
add_suffix: "="
|
187
|
+
recursive: true
|
188
|
+
- name: layout
|
189
|
+
calls:
|
190
|
+
argument: 0
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# THIS IS INCOMPLETE (you can help by expanding it)
|
2
|
+
# rails is _really complicated_ and has a lot of magic which calls methods for you.
|
3
|
+
# some is currently impossible to handle (with_options).
|
4
|
+
# Some is just corners of rails I haven't hit yet.
|
5
|
+
keep:
|
6
|
+
- has_suffix: Helper
|
7
|
+
path: /app/helpers
|
8
|
+
|
9
|
+
dynamic:
|
10
|
+
- name:
|
11
|
+
- check_box
|
12
|
+
- date_select
|
13
|
+
- datetime_select
|
14
|
+
- file_field
|
15
|
+
- hidden_field
|
16
|
+
- label
|
17
|
+
- radio_button
|
18
|
+
- select
|
19
|
+
- time_select
|
20
|
+
- time_zone_select
|
21
|
+
- color_field
|
22
|
+
- date_field
|
23
|
+
- datetime_field
|
24
|
+
- datetime_local_field
|
25
|
+
- email_field
|
26
|
+
- month_field
|
27
|
+
- number_field
|
28
|
+
- password_field
|
29
|
+
- phone_field
|
30
|
+
- range_field
|
31
|
+
- search_field
|
32
|
+
- telephone_field
|
33
|
+
- text_area
|
34
|
+
- text_field
|
35
|
+
- time_field
|
36
|
+
- url_field
|
37
|
+
- week_field
|
38
|
+
calls:
|
39
|
+
- arguments: [0,1] # 0: with a receiver, 1: with no receiver
|
40
|
+
- arguments: [0,1]
|
41
|
+
add_suffix: '='
|
42
|
+
- name: fields_for
|
43
|
+
calls:
|
44
|
+
argument: 1
|
45
|
+
add_suffix: _attributes
|
46
|
+
- name: options_from_collection_for_select
|
47
|
+
calls:
|
48
|
+
- arguments: [1,2]
|
49
|
+
- name:
|
50
|
+
- collection_select
|
51
|
+
- collection_check_boxes
|
52
|
+
- collection_radio_buttons
|
53
|
+
calls:
|
54
|
+
- argument: 1
|
55
|
+
add_suffix: '='
|
56
|
+
- arguments: [3,4]
|
57
|
+
- name: grouped_collection_select
|
58
|
+
calls:
|
59
|
+
- argument: 1
|
60
|
+
add_suffix: '='
|
61
|
+
- arguments: [3,4,5,6]
|
62
|
+
- name: option_groups_from_collection_for_select
|
63
|
+
calls:
|
64
|
+
- arguments: [0,1,2,3]
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# THIS IS INCOMPLETE (you can help by expanding it)
|
2
|
+
# rails is _really complicated_ and has a lot of magic which calls methods for you.
|
3
|
+
# some is currently impossible to handle (with_options).
|
4
|
+
# Some is just corners of rails I haven't hit yet.
|
5
|
+
keep:
|
6
|
+
- serialize?
|
7
|
+
- serialize
|
8
|
+
- deserialize
|
9
|
+
dynamic:
|
10
|
+
- name:
|
11
|
+
- perform_later
|
12
|
+
- perform
|
13
|
+
calls:
|
14
|
+
- value: perform
|
15
|
+
- names:
|
16
|
+
- before_enqueue
|
17
|
+
- around_enqueue
|
18
|
+
- after_enqueue
|
19
|
+
- before_perform
|
20
|
+
- around_perform
|
21
|
+
- after_perform
|
22
|
+
calls:
|
23
|
+
- arguments: 1
|
24
|
+
- arguments: [if, unless]
|
25
|
+
nested:
|
26
|
+
arguments: '*'
|
27
|
+
- name: rescue_from
|
28
|
+
calls:
|
29
|
+
- arguments: 1
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# THIS IS INCOMPLETE (you can help by expanding it)
|
2
|
+
# rails is _really complicated_ and has a lot of magic which calls methods for you.
|
3
|
+
# some is currently impossible to handle (with_options).
|
4
|
+
# Some is just corners of rails I haven't hit yet.
|
5
|
+
keep:
|
6
|
+
- validate_each # ActiveModel::EachValidator
|
7
|
+
|
8
|
+
dynamic:
|
9
|
+
- names:
|
10
|
+
- after_initialize
|
11
|
+
- before_validation
|
12
|
+
- after_validation
|
13
|
+
calls:
|
14
|
+
- arguments: 0
|
15
|
+
- arguments: [if, unless]
|
16
|
+
nested:
|
17
|
+
arguments: '*'
|
18
|
+
- name:
|
19
|
+
- validates_associated
|
20
|
+
calls:
|
21
|
+
- arguments: ['*', if, unless]
|
22
|
+
- name: validates
|
23
|
+
calls:
|
24
|
+
- arguments:
|
25
|
+
- '*'
|
26
|
+
- within
|
27
|
+
- inclusion
|
28
|
+
- scope
|
29
|
+
- if
|
30
|
+
- unless
|
31
|
+
- arguments: inclusion
|
32
|
+
nested:
|
33
|
+
arguments: 'in'
|
34
|
+
- keywords:
|
35
|
+
unless: [if, unless]
|
36
|
+
camelize: true
|
37
|
+
add_suffix: Validator
|
38
|
+
split: '::'
|
39
|
+
- names:
|
40
|
+
- validate
|
41
|
+
- validate_associated
|
42
|
+
calls:
|
43
|
+
- arguments: ['*', if, unless]
|
44
|
+
- name:
|
45
|
+
- attribute
|
46
|
+
- alias_attribute
|
47
|
+
path: app/models/*
|
48
|
+
defines:
|
49
|
+
argument: 0
|
50
|
+
transforms:
|
51
|
+
- original
|
52
|
+
- add_suffix: '?'
|
53
|
+
- add_suffix: '='
|
54
|
+
- name: alias_attribute
|
55
|
+
calls:
|
56
|
+
- argument: 1
|
57
|
+
- argument: 1
|
58
|
+
add_suffix: '?'
|
59
|
+
- argument: 1
|
60
|
+
add_suffix: '='
|
61
|
+
- name: resource
|
62
|
+
calls:
|
63
|
+
- argument: 0
|
64
|
+
camelize: true
|
65
|
+
pluralize: true
|
66
|
+
add_suffix: Controller
|
67
|
+
split: '::'
|
68
|
+
|
69
|
+
- name:
|
70
|
+
- new
|
71
|
+
- assign_attributes
|
72
|
+
calls:
|
73
|
+
keyword: '**'
|
74
|
+
add_suffix: '='
|