why-classes 0.1.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.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +128 -0
  4. data/config/default.yml +69 -0
  5. data/exe/why-classes +6 -0
  6. data/lib/why_classes/ast/class_shape.rb +106 -0
  7. data/lib/why_classes/ast/node_helpers.rb +186 -0
  8. data/lib/why_classes/cli.rb +97 -0
  9. data/lib/why_classes/config_loader.rb +51 -0
  10. data/lib/why_classes/configuration.rb +68 -0
  11. data/lib/why_classes/correction.rb +44 -0
  12. data/lib/why_classes/correctors/data_bucket_corrector.rb +79 -0
  13. data/lib/why_classes/disable_comments.rb +59 -0
  14. data/lib/why_classes/file_finder.rb +43 -0
  15. data/lib/why_classes/formatters/base_formatter.rb +30 -0
  16. data/lib/why_classes/formatters/clang_formatter.rb +19 -0
  17. data/lib/why_classes/formatters/diff_formatter.rb +107 -0
  18. data/lib/why_classes/formatters/json_formatter.rb +42 -0
  19. data/lib/why_classes/formatters/progress_formatter.rb +38 -0
  20. data/lib/why_classes/offense.rb +29 -0
  21. data/lib/why_classes/options.rb +32 -0
  22. data/lib/why_classes/parser.rb +32 -0
  23. data/lib/why_classes/registry.rb +39 -0
  24. data/lib/why_classes/rule.rb +89 -0
  25. data/lib/why_classes/rules/data_bucket.rb +79 -0
  26. data/lib/why_classes/rules/function_bucket.rb +55 -0
  27. data/lib/why_classes/rules/inheritance_for_mixins.rb +37 -0
  28. data/lib/why_classes/rules/invalid_initial_state.rb +56 -0
  29. data/lib/why_classes/rules/single_attribute_reader.rb +38 -0
  30. data/lib/why_classes/rules/stateless_singleton_methods.rb +50 -0
  31. data/lib/why_classes/runner.rb +115 -0
  32. data/lib/why_classes/source_file.rb +45 -0
  33. data/lib/why_classes/version.rb +5 -0
  34. data/lib/why_classes.rb +32 -0
  35. metadata +113 -0
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: why-classes
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Gabriel Quaresma
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: parser
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '3.2'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '3.2'
26
+ - !ruby/object:Gem::Dependency
27
+ name: prism
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ description: |
41
+ why-classes is a linter and refactoring tool inspired by Dave Thomas's talk on the
42
+ over-use of classes in Ruby. It scans a Ruby/Rails codebase (or a single file) for
43
+ "class smells" -- stateless singleton-method classes, function buckets, invalid
44
+ initial state, fat-base inheritance, and data buckets -- and reports each one with a
45
+ concrete refactoring suggestion toward modules, composition, Struct or Data. The
46
+ mechanically-safe refactorings (notably data bucket -> Struct/Data) can be applied
47
+ automatically with --fix.
48
+ email:
49
+ - gabriel.quaresma@codeminer42.com
50
+ executables:
51
+ - why-classes
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - LICENSE.txt
56
+ - README.md
57
+ - config/default.yml
58
+ - exe/why-classes
59
+ - lib/why_classes.rb
60
+ - lib/why_classes/ast/class_shape.rb
61
+ - lib/why_classes/ast/node_helpers.rb
62
+ - lib/why_classes/cli.rb
63
+ - lib/why_classes/config_loader.rb
64
+ - lib/why_classes/configuration.rb
65
+ - lib/why_classes/correction.rb
66
+ - lib/why_classes/correctors/data_bucket_corrector.rb
67
+ - lib/why_classes/disable_comments.rb
68
+ - lib/why_classes/file_finder.rb
69
+ - lib/why_classes/formatters/base_formatter.rb
70
+ - lib/why_classes/formatters/clang_formatter.rb
71
+ - lib/why_classes/formatters/diff_formatter.rb
72
+ - lib/why_classes/formatters/json_formatter.rb
73
+ - lib/why_classes/formatters/progress_formatter.rb
74
+ - lib/why_classes/offense.rb
75
+ - lib/why_classes/options.rb
76
+ - lib/why_classes/parser.rb
77
+ - lib/why_classes/registry.rb
78
+ - lib/why_classes/rule.rb
79
+ - lib/why_classes/rules/data_bucket.rb
80
+ - lib/why_classes/rules/function_bucket.rb
81
+ - lib/why_classes/rules/inheritance_for_mixins.rb
82
+ - lib/why_classes/rules/invalid_initial_state.rb
83
+ - lib/why_classes/rules/single_attribute_reader.rb
84
+ - lib/why_classes/rules/stateless_singleton_methods.rb
85
+ - lib/why_classes/runner.rb
86
+ - lib/why_classes/source_file.rb
87
+ - lib/why_classes/version.rb
88
+ homepage: https://github.com/gabriel-quaresma/why-classes
89
+ licenses:
90
+ - MIT
91
+ metadata:
92
+ homepage_uri: https://github.com/gabriel-quaresma/why-classes
93
+ source_code_uri: https://github.com/gabriel-quaresma/why-classes
94
+ rubygems_mfa_required: 'true'
95
+ rdoc_options: []
96
+ require_paths:
97
+ - lib
98
+ required_ruby_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 3.2.0
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ requirements: []
109
+ rubygems_version: 4.0.3
110
+ specification_version: 4
111
+ summary: Detect over-use of classes in Ruby and refactor toward modules, Struct and
112
+ Data.
113
+ test_files: []