lint_fu 0.5.0 → 0.5.3

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 (39) hide show
  1. data/README.rdoc +4 -2
  2. data/bin/lint_fu +2 -86
  3. data/lib/lint_fu/blessing.rb +40 -0
  4. data/lib/lint_fu/checker.rb +49 -3
  5. data/lib/lint_fu/cli/command.rb +48 -0
  6. data/lib/lint_fu/cli/prune.rb +78 -0
  7. data/lib/lint_fu/cli/scan.rb +78 -0
  8. data/lib/lint_fu/cli.rb +52 -0
  9. data/lib/lint_fu/eidos.rb +35 -0
  10. data/lib/lint_fu/{model_element_builder.rb → eidos_builder.rb} +8 -3
  11. data/lib/lint_fu/eidos_container.rb +25 -0
  12. data/lib/lint_fu/file_range.rb +43 -0
  13. data/lib/lint_fu/mixins/sexp_instance_methods.rb +57 -9
  14. data/lib/lint_fu/parser.rb +1 -2
  15. data/lib/lint_fu/plugins/action_pack/controller_eidos.rb +7 -0
  16. data/lib/lint_fu/{action_pack/model_controller_builder.rb → plugins/action_pack/controller_eidos_builder.rb} +6 -6
  17. data/lib/lint_fu/plugins/action_pack.rb +2 -0
  18. data/lib/lint_fu/{active_record/model_model.rb → plugins/active_record/model_eidos.rb} +3 -3
  19. data/lib/lint_fu/{active_record/model_model_builder.rb → plugins/active_record/model_eidos_builder.rb} +17 -11
  20. data/lib/lint_fu/plugins/active_record.rb +2 -0
  21. data/lib/lint_fu/{rails → plugins/rails}/buggy_eager_load_checker.rb +6 -5
  22. data/lib/lint_fu/{rails/scan_builder.rb → plugins/rails/issue_builder.rb} +9 -16
  23. data/lib/lint_fu/plugins/rails/model_application.rb +21 -0
  24. data/lib/lint_fu/plugins/rails/model_application_factory.rb +31 -0
  25. data/lib/lint_fu/{rails → plugins/rails}/sql_injection_checker.rb +9 -5
  26. data/lib/lint_fu/{rails → plugins/rails}/unsafe_find_checker.rb +17 -30
  27. data/lib/lint_fu/plugins/rails.rb +29 -0
  28. data/lib/lint_fu/plugins.rb +11 -0
  29. data/lib/lint_fu/scan.rb +1 -49
  30. data/lib/lint_fu.rb +13 -8
  31. data/lint_fu.gemspec +10 -7
  32. metadata +140 -24
  33. data/lib/lint_fu/action_pack/model_controller.rb +0 -7
  34. data/lib/lint_fu/action_pack.rb +0 -2
  35. data/lib/lint_fu/active_record.rb +0 -2
  36. data/lib/lint_fu/model_element.rb +0 -48
  37. data/lib/lint_fu/rails/model_application.rb +0 -16
  38. data/lib/lint_fu/rails/model_application_builder.rb +0 -32
  39. data/lib/lint_fu/rails.rb +0 -6
@@ -1,7 +0,0 @@
1
- module LintFu
2
- module ActionPack
3
- class ModelController
4
- include LintFu::ModelElement
5
- end
6
- end
7
- end
@@ -1,2 +0,0 @@
1
- require 'lint_fu/action_pack/model_controller'
2
- require 'lint_fu/action_pack/model_controller_builder'
@@ -1,2 +0,0 @@
1
- require 'lint_fu/active_record/model_model'
2
- require 'lint_fu/active_record/model_model_builder'
@@ -1,48 +0,0 @@
1
- module LintFu
2
- # An element of a static analysis model that contains, or consists of, submodels. For instance,
3
- # an Application might consists of Models, Controllers and Views.
4
- module SuperModel
5
- def submodels
6
- return [].freeze unless @submodels
7
- @submodels.dup.freeze
8
- end
9
-
10
- def each_submodel(&block)
11
- @submodels ||= Set.new()
12
- @submodels.each(&block)
13
- end
14
-
15
- def add_submodel(sub)
16
- @submodels ||= Set.new()
17
- @submodels << sub
18
- end
19
-
20
- def remove_submodel(sub)
21
- @submodels ||= Set.new()
22
- @submodels.delete sub
23
- end
24
- end
25
-
26
- # An element of the static analysis model being created; generally corresponds to a
27
- # class (e.g. model, controller or view) within the application being scanned.
28
- module ModelElement
29
- attr_accessor :supermodel
30
- attr_reader :modeled_class_name, :modeled_class_superclass_name, :parse_tree
31
-
32
- #sexp:: [:class, <classname>, <superclass|nil>, <CLASS DEFS>]
33
- #namespace:: Array of enclosing module names for this class
34
- def initialize(sexp, namespace=nil)
35
- @parse_tree = sexp
36
- if namespace
37
- @modeled_class_name = namespace.join('::') + (namespace.empty? ? '' : '::') + sexp[1].to_s
38
- else
39
- @modeled_class_name = sexp[1]
40
- end
41
- end
42
-
43
- #Have a pretty string representation
44
- def to_s
45
- "<<model of #{modeled_class_name}>>"
46
- end
47
- end
48
- end
@@ -1,16 +0,0 @@
1
- module LintFu
2
- module Rails
3
- class ModelApplication
4
- include LintFu::ModelElement
5
- include LintFu::SuperModel
6
-
7
- def controllers
8
- submodels.select { |m| m.kind_of?(LintFu::ActionPack::ModelController) }
9
- end
10
-
11
- def models
12
- submodels.select { |m| m.kind_of?(LintFu::ActiveRecord::ModelModel) }
13
- end
14
- end
15
- end
16
- end
@@ -1,32 +0,0 @@
1
- module LintFu
2
- module Rails
3
- class ModelApplicationBuilder < ModelElementBuilder
4
- def initialize(fs_root)
5
- super()
6
-
7
- application = ModelApplication.new(fs_root)
8
-
9
- models_dir = File.join(fs_root, 'app', 'models')
10
- builder = ActiveRecord::ModelModelBuilder.new
11
- #TODO ensure the Rails app is using ActiveRecord
12
- Dir.glob(File.join(models_dir, '**', '*.rb')).each do |f|
13
- sexp = Parser.parse_ruby(f)
14
- builder.process(sexp)
15
- end
16
- builder.model_elements.each { |elem| application.add_submodel(elem) }
17
-
18
- controllers_dir = File.join(fs_root, 'app', 'controllers')
19
- builder = ActionPack::ModelControllerBuilder.new
20
- Dir.glob(File.join(controllers_dir, '**', '*.rb')).each do |f|
21
- contents = File.read(f)
22
- sexp = RubyParser.new.parse(contents)
23
- sexp.file = f
24
- builder.process(sexp)
25
- end
26
- builder.model_elements.each { |elem| application.add_submodel(elem) }
27
-
28
- self.model_elements << application
29
- end
30
- end
31
- end
32
- end
data/lib/lint_fu/rails.rb DELETED
@@ -1,6 +0,0 @@
1
- require 'lint_fu/rails/model_application'
2
- require 'lint_fu/rails/model_application_builder'
3
- require 'lint_fu/rails/buggy_eager_load_checker'
4
- require 'lint_fu/rails/sql_injection_checker'
5
- require 'lint_fu/rails/unsafe_find_checker'
6
- require 'lint_fu/rails/scan_builder'