inch 0.2.3 → 0.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +7 -0
  3. data/TODOS.md +0 -5
  4. data/config/defaults.rb +26 -1
  5. data/inch.gemspec +1 -0
  6. data/lib/inch.rb +2 -1
  7. data/lib/inch/api.rb +34 -0
  8. data/lib/inch/api/filter.rb +17 -0
  9. data/lib/inch/api/get.rb +30 -0
  10. data/lib/inch/api/list.rb +10 -0
  11. data/lib/inch/api/options/base.rb +45 -0
  12. data/lib/inch/api/options/filter.rb +25 -0
  13. data/lib/inch/api/options/suggest.rb +36 -0
  14. data/lib/inch/api/stats.rb +7 -0
  15. data/lib/inch/api/suggest.rb +110 -0
  16. data/lib/inch/cli.rb +4 -1
  17. data/lib/inch/cli/command/base.rb +1 -17
  18. data/lib/inch/cli/command/base_list.rb +3 -63
  19. data/lib/inch/cli/command/base_object.rb +6 -28
  20. data/lib/inch/cli/command/list.rb +3 -2
  21. data/lib/inch/cli/command/options/base.rb +1 -1
  22. data/lib/inch/cli/command/options/base_list.rb +4 -2
  23. data/lib/inch/cli/command/options/suggest.rb +9 -8
  24. data/lib/inch/cli/command/output/base.rb +9 -11
  25. data/lib/inch/cli/command/output/list.rb +2 -2
  26. data/lib/inch/cli/command/output/show.rb +2 -10
  27. data/lib/inch/cli/command/output/stats.rb +4 -3
  28. data/lib/inch/cli/command/output/suggest.rb +5 -5
  29. data/lib/inch/cli/command/stats.rb +4 -3
  30. data/lib/inch/cli/command/suggest.rb +4 -94
  31. data/lib/inch/code_object.rb +2 -2
  32. data/lib/inch/code_object/converter.rb +89 -0
  33. data/lib/inch/code_object/provider.rb +36 -0
  34. data/lib/inch/code_object/provider/yard.rb +19 -0
  35. data/lib/inch/code_object/provider/yard/docstring.rb +106 -0
  36. data/lib/inch/code_object/provider/yard/nodoc_helper.rb +93 -0
  37. data/lib/inch/code_object/provider/yard/object.rb +55 -0
  38. data/lib/inch/code_object/provider/yard/object/base.rb +262 -0
  39. data/lib/inch/code_object/provider/yard/object/class_object.rb +12 -0
  40. data/lib/inch/code_object/provider/yard/object/constant_object.rb +12 -0
  41. data/lib/inch/code_object/provider/yard/object/method_object.rb +126 -0
  42. data/lib/inch/code_object/provider/yard/object/method_parameter_object.rb +88 -0
  43. data/lib/inch/code_object/provider/yard/object/module_object.rb +12 -0
  44. data/lib/inch/code_object/provider/yard/object/namespace_object.rb +47 -0
  45. data/lib/inch/code_object/provider/yard/parser.rb +54 -0
  46. data/lib/inch/code_object/proxy.rb +5 -3
  47. data/lib/inch/code_object/proxy/base.rb +103 -110
  48. data/lib/inch/code_object/proxy/class_object.rb +0 -1
  49. data/lib/inch/code_object/proxy/method_object.rb +20 -99
  50. data/lib/inch/code_object/proxy/method_parameter_object.rb +15 -39
  51. data/lib/inch/code_object/proxy/namespace_object.rb +7 -18
  52. data/lib/inch/codebase.rb +19 -0
  53. data/lib/inch/codebase/objects.rb +73 -0
  54. data/lib/inch/codebase/objects_filter.rb +61 -0
  55. data/lib/inch/codebase/proxy.rb +22 -0
  56. data/lib/inch/config.rb +8 -1
  57. data/lib/inch/evaluation.rb +5 -7
  58. data/lib/inch/evaluation/file.rb +1 -1
  59. data/lib/inch/evaluation/grade.rb +1 -1
  60. data/lib/inch/evaluation/object_schema.rb +3 -1
  61. data/lib/inch/evaluation/priority_range.rb +44 -0
  62. data/lib/inch/evaluation/proxy.rb +25 -0
  63. data/lib/inch/evaluation/proxy/base.rb +146 -0
  64. data/lib/inch/evaluation/proxy/class_object.rb +8 -0
  65. data/lib/inch/evaluation/proxy/constant_object.rb +19 -0
  66. data/lib/inch/evaluation/proxy/method_object.rb +65 -0
  67. data/lib/inch/evaluation/proxy/module_object.rb +8 -0
  68. data/lib/inch/evaluation/proxy/namespace_object.rb +27 -0
  69. data/lib/inch/evaluation/role/base.rb +19 -0
  70. data/lib/inch/evaluation/role/constant.rb +16 -0
  71. data/lib/inch/evaluation/role/method.rb +22 -0
  72. data/lib/inch/evaluation/role/method_parameter.rb +31 -1
  73. data/lib/inch/evaluation/role/namespace.rb +15 -0
  74. data/lib/inch/evaluation/role/object.rb +24 -0
  75. data/lib/inch/rake/suggest.rb +1 -0
  76. data/lib/inch/utils/read_write_methods.rb +44 -0
  77. data/lib/inch/{cli → utils}/weighted_list.rb +1 -1
  78. data/lib/inch/version.rb +1 -1
  79. data/test/fixtures/simple/lib/broken.rb +8 -0
  80. data/test/inch/api/filter_test.rb +51 -0
  81. data/test/inch/api/get_test.rb +22 -0
  82. data/test/inch/api/list_test.rb +15 -0
  83. data/test/inch/api/options/base_test.rb +30 -0
  84. data/test/inch/api/stats_test.rb +15 -0
  85. data/test/inch/api/suggest_test.rb +26 -0
  86. data/test/inch/cli/command/list_test.rb +2 -1
  87. data/test/inch/code_object/converter_test.rb +29 -0
  88. data/test/inch/code_object/{docstring_test.rb → provider/yard/docstring_test.rb} +13 -13
  89. data/test/inch/code_object/{nodoc_helper_test.rb → provider/yard/nodoc_helper_test.rb} +6 -6
  90. data/test/inch/code_object/provider/yard_test.rb +11 -0
  91. data/test/inch/code_object/provider_test.rb +9 -0
  92. data/test/inch/code_object/proxy/method_object_test.rb +22 -22
  93. data/test/inch/code_object/proxy_test.rb +10 -10
  94. data/test/inch/codebase/objects_test.rb +28 -0
  95. data/test/inch/codebase/proxy_test.rb +17 -0
  96. data/test/inch/evaluation/role/base_test.rb +71 -0
  97. data/test/inch/{cli → utils}/weighted_list_test.rb +2 -2
  98. data/test/shared/base_list.rb +73 -0
  99. data/test/test_helper.rb +0 -95
  100. metadata +89 -24
  101. data/lib/inch/code_object/docstring.rb +0 -102
  102. data/lib/inch/code_object/nodoc_helper.rb +0 -107
  103. data/lib/inch/evaluation/base.rb +0 -157
  104. data/lib/inch/evaluation/class_object.rb +0 -6
  105. data/lib/inch/evaluation/constant_object.rb +0 -33
  106. data/lib/inch/evaluation/method_object.rb +0 -105
  107. data/lib/inch/evaluation/module_object.rb +0 -6
  108. data/lib/inch/evaluation/namespace_object.rb +0 -52
  109. data/lib/inch/evaluation/read_write_methods.rb +0 -21
  110. data/lib/inch/source_parser.rb +0 -62
  111. data/test/inch/source_parser_test.rb +0 -23
@@ -1,6 +0,0 @@
1
- module Inch
2
- module Evaluation
3
- class ModuleObject < NamespaceObject
4
- end
5
- end
6
- end
@@ -1,52 +0,0 @@
1
- module Inch
2
- module Evaluation
3
- # a namespace object can have methods and other namespace objects
4
- # inside itself (e.g. classes and modules)
5
- class NamespaceObject < Base
6
- RUBY_CORE = %w(Array Bignum BasicObject Object Module Class Complex NilClass Numeric String Float Fiber FiberError Continuation Dir File Encoding Enumerator StopIteration Enumerator::Generator Enumerator::Yielder Exception SystemExit SignalException Interrupt StandardError TypeError ArgumentError IndexError KeyError RangeError ScriptError SyntaxError LoadError NotImplementedError NameError NoMethodError RuntimeError SecurityError NoMemoryError EncodingError SystemCallError Encoding::CompatibilityError File::Stat IO Hash ENV IOError EOFError ARGF RubyVM RubyVM::InstructionSequence Math::DomainError ZeroDivisionError FloatDomainError Integer Fixnum Data TrueClass FalseClass Mutex Thread Proc LocalJumpError SystemStackError Method UnboundMethod Binding Process::Status Random Range Rational RegexpError Regexp MatchData Symbol Struct ThreadGroup ThreadError Time Encoding::UndefinedConversionError Encoding::InvalidByteSequenceError Encoding::ConverterNotFoundError Encoding::Converter RubyVM::Env) +
7
- %w(Comparable Kernel File::Constants Enumerable Errno FileTest GC ObjectSpace GC::Profiler IO::WaitReadable IO::WaitWritable Marshal Math Process Process::UID Process::GID Process::Sys Signal)
8
-
9
- def evaluate
10
- eval_doc
11
- eval_code_example
12
- eval_visibility
13
- eval_tags
14
-
15
- eval_children
16
- eval_namespace
17
- end
18
-
19
- private
20
-
21
- def eval_namespace
22
- if RUBY_CORE.include?(object.path)
23
- add_role Role::Namespace::Core.new(object)
24
- end
25
- if object.has_many_attributes?
26
- add_role Role::Namespace::WithManyAttributes.new(object)
27
- end
28
- end
29
-
30
- def eval_children
31
- if children.empty?
32
- add_role Role::Namespace::WithoutChildren.new(object)
33
- else
34
- add_role Role::Namespace::WithChildren.new(object, children.map(&:score).min)
35
- if object.pure_namespace?
36
- add_role Role::Namespace::Pure.new(object)
37
- end
38
- if object.no_methods?
39
- add_role Role::Namespace::WithoutMethods.new(object)
40
- end
41
- if object.has_many_children?
42
- add_role Role::Namespace::WithManyChildren.new(object)
43
- end
44
- end
45
- end
46
-
47
- def children
48
- @children ||= object.children.map(&:evaluation)
49
- end
50
- end
51
- end
52
- end
@@ -1,21 +0,0 @@
1
- module Inch
2
- module Evaluation
3
- module ReadWriteMethods
4
- def rw_method(name)
5
- class_eval """
6
- def #{name}(value = nil)
7
- if value.nil?
8
- @#{name}
9
- else
10
- @#{name} = value
11
- end
12
- end
13
- """
14
- end
15
-
16
- def rw_methods(*names)
17
- [names].flatten.each { |name| rw_method(name) }
18
- end
19
- end
20
- end
21
- end
@@ -1,62 +0,0 @@
1
- module Inch
2
- # Parses the source tree (using YARD)
3
- class SourceParser
4
- # Helper method to run an instance with the given +args+
5
- #
6
- # @see #run
7
- # @return [SourceParser] the instance that ran
8
- def self.run(*args)
9
- parser = self.new
10
- parser.run(*args)
11
- parser
12
- end
13
-
14
- # Returns all parsed objects as code object proxies
15
- #
16
- # @see CodeObject::Proxy.for
17
- # @return [Array<CodeObject::Proxy::Base>]
18
- def all_objects
19
- @all_objects ||= all_parsed_objects.map do |o|
20
- CodeObject::Proxy.for(o)
21
- end.sort_by(&:path)
22
- end
23
-
24
- # Returns the object with the given +path+
25
- #
26
- # @example
27
- #
28
- # SourceParser.find_objects("Foo#bar")
29
- # # => returns code object proxy for Foo#bar
30
- #
31
- # @param path [String] partial path/name of an object
32
- # @return [CodeObject::Proxy::Base]
33
- def find_object(path)
34
- all_objects.detect { |o| o.path == path }
35
- end
36
- alias :[] :find_object
37
-
38
- # Returns all objects where the +path+ starts_with the given +path+
39
- #
40
- # @example
41
- #
42
- # SourceParser.find_objects("Foo#")
43
- # # => returns code object proxies for all instance methods of Foo
44
- #
45
- # @param path [String] partial path/name of an object
46
- # @return [Array<CodeObject::Proxy::Base>]
47
- def find_objects(path)
48
- all_objects.select { |o| o.path.start_with?(path) }
49
- end
50
-
51
- def run(paths, excluded = [])
52
- YARD::Registry.clear
53
- YARD.parse(paths, excluded)
54
- end
55
-
56
- private
57
-
58
- def all_parsed_objects
59
- YARD::Registry.all
60
- end
61
- end
62
- end
@@ -1,23 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
-
3
- describe ::Inch::SourceParser do
4
- before do
5
- Dir.chdir fixture_path(:simple)
6
- @source_parser = Inch::SourceParser.run(["lib/**/*.rb"])
7
- end
8
-
9
- it "should parse all objects" do
10
- refute_nil @source_parser.find_object("Foo")
11
- refute_nil @source_parser.find_object("Foo::Bar")
12
- refute_nil @source_parser.find_object("Foo::Bar#method_without_doc")
13
- refute_nil @source_parser.find_object("Foo::Bar#method_with_missing_param_doc")
14
- refute_nil @source_parser.find_object("Foo::Bar#method_with_wrong_doc")
15
- refute_nil @source_parser.find_object("Foo::Bar#method_with_full_doc")
16
- end
17
-
18
- it "should return the correct depth for each object" do
19
- assert_equal 1, @source_parser.find_object("Foo").depth
20
- assert_equal 2, @source_parser.find_object("Foo::Bar").depth
21
- assert_equal 3, @source_parser.find_object("Foo::Bar#method_without_doc").depth
22
- end
23
- end