inch 0.5.0.rc3 → 0.5.0.rc4

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 (259) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +15 -0
  3. data/.rubocop_todo.yml +94 -0
  4. data/CHANGELOG.md +26 -2
  5. data/Gemfile +5 -2
  6. data/README.md +3 -3
  7. data/Rakefile +6 -2
  8. data/bin/inch +3 -3
  9. data/config/{example.yml → .inch.yml.sample} +1 -0
  10. data/config/base.rb +53 -0
  11. data/config/elixir.rb +43 -0
  12. data/config/nodejs.rb +10 -0
  13. data/config/{defaults.rb → ruby.rb} +5 -54
  14. data/inch.gemspec +7 -7
  15. data/lib/inch.rb +14 -9
  16. data/lib/inch/api.rb +10 -10
  17. data/lib/inch/api/compare.rb +2 -2
  18. data/lib/inch/api/compare/code_objects.rb +2 -3
  19. data/lib/inch/api/compare/codebases.rb +1 -1
  20. data/lib/inch/api/diff.rb +13 -16
  21. data/lib/inch/api/filter.rb +1 -1
  22. data/lib/inch/api/get.rb +2 -2
  23. data/lib/inch/api/options/base.rb +4 -4
  24. data/lib/inch/api/options/filter.rb +0 -4
  25. data/lib/inch/api/options/suggest.rb +2 -6
  26. data/lib/inch/api/stats.rb +0 -1
  27. data/lib/inch/api/suggest.rb +9 -10
  28. data/lib/inch/cli.rb +6 -6
  29. data/lib/inch/cli/arguments.rb +2 -2
  30. data/lib/inch/cli/command.rb +15 -15
  31. data/lib/inch/cli/command/base.rb +30 -9
  32. data/lib/inch/cli/command/base_list.rb +2 -2
  33. data/lib/inch/cli/command/console.rb +5 -5
  34. data/lib/inch/cli/command/diff.rb +9 -9
  35. data/lib/inch/cli/command/inspect.rb +5 -4
  36. data/lib/inch/cli/command/list.rb +4 -4
  37. data/lib/inch/cli/command/options/base.rb +17 -16
  38. data/lib/inch/cli/command/options/base_list.rb +9 -5
  39. data/lib/inch/cli/command/options/console.rb +4 -3
  40. data/lib/inch/cli/command/options/diff.rb +8 -6
  41. data/lib/inch/cli/command/options/inspect.rb +2 -2
  42. data/lib/inch/cli/command/options/list.rb +3 -2
  43. data/lib/inch/cli/command/options/show.rb +2 -2
  44. data/lib/inch/cli/command/options/stats.rb +2 -1
  45. data/lib/inch/cli/command/options/suggest.rb +6 -3
  46. data/lib/inch/cli/command/output/base.rb +4 -6
  47. data/lib/inch/cli/command/output/console.rb +6 -7
  48. data/lib/inch/cli/command/output/diff.rb +6 -6
  49. data/lib/inch/cli/command/output/inspect.rb +6 -8
  50. data/lib/inch/cli/command/output/list.rb +0 -1
  51. data/lib/inch/cli/command/output/show.rb +4 -5
  52. data/lib/inch/cli/command/output/stats.rb +21 -21
  53. data/lib/inch/cli/command/output/suggest.rb +31 -28
  54. data/lib/inch/cli/command/show.rb +4 -4
  55. data/lib/inch/cli/command/stats.rb +4 -4
  56. data/lib/inch/cli/command/suggest.rb +6 -6
  57. data/lib/inch/cli/command_parser.rb +6 -5
  58. data/lib/inch/cli/sparkline_helper.rb +6 -6
  59. data/lib/inch/cli/trace_helper.rb +1 -1
  60. data/lib/inch/cli/yardopts_helper.rb +4 -3
  61. data/lib/inch/code_object.rb +3 -3
  62. data/lib/inch/code_object/converter.rb +6 -8
  63. data/lib/inch/code_object/provider.rb +11 -11
  64. data/lib/inch/code_object/proxy.rb +61 -30
  65. data/lib/inch/codebase.rb +7 -8
  66. data/lib/inch/codebase/object.rb +60 -0
  67. data/lib/inch/codebase/objects.rb +8 -10
  68. data/lib/inch/codebase/objects_filter.rb +7 -5
  69. data/lib/inch/codebase/proxy.rb +4 -4
  70. data/lib/inch/codebase/serializer.rb +3 -3
  71. data/lib/inch/config.rb +42 -11
  72. data/lib/inch/config/base.rb +8 -29
  73. data/lib/inch/config/codebase.rb +32 -7
  74. data/lib/inch/config/evaluation.rb +61 -0
  75. data/lib/inch/core_ext.rb +1 -1
  76. data/lib/inch/core_ext/string.rb +1 -1
  77. data/lib/inch/evaluation.rb +13 -21
  78. data/lib/inch/evaluation/file.rb +4 -2
  79. data/lib/inch/evaluation/grade_list.rb +4 -4
  80. data/lib/inch/evaluation/priority_range.rb +3 -0
  81. data/lib/inch/evaluation/proxy.rb +139 -14
  82. data/lib/inch/evaluation/role.rb +99 -0
  83. data/lib/inch/language.rb +3 -0
  84. data/lib/inch/language/elixir/code_object/base.rb +197 -0
  85. data/lib/inch/language/elixir/code_object/function_object.rb +74 -0
  86. data/lib/inch/language/elixir/code_object/module_object.rb +23 -0
  87. data/lib/inch/language/elixir/code_object/type_object.rb +11 -0
  88. data/lib/inch/language/elixir/evaluation/base.rb +28 -0
  89. data/lib/inch/language/elixir/evaluation/function_object.rb +31 -0
  90. data/lib/inch/language/elixir/evaluation/module_object.rb +27 -0
  91. data/lib/inch/language/elixir/evaluation/type_object.rb +11 -0
  92. data/lib/inch/language/elixir/import.rb +24 -0
  93. data/lib/inch/language/elixir/provider/reader.rb +19 -0
  94. data/lib/inch/language/elixir/provider/reader/object.rb +63 -0
  95. data/lib/inch/language/elixir/provider/reader/object/base.rb +191 -0
  96. data/lib/inch/language/elixir/provider/reader/object/function_object.rb +26 -0
  97. data/lib/inch/language/elixir/provider/reader/object/module_object.rb +22 -0
  98. data/lib/inch/language/elixir/provider/reader/object/type_object.rb +15 -0
  99. data/lib/inch/language/elixir/provider/reader/parser.rb +55 -0
  100. data/lib/inch/language/elixir/roles/base.rb +32 -0
  101. data/lib/inch/language/elixir/roles/function.rb +112 -0
  102. data/lib/inch/language/elixir/roles/module.rb +64 -0
  103. data/lib/inch/language/elixir/roles/object.rb +76 -0
  104. data/lib/inch/language/elixir/roles/type.rb +13 -0
  105. data/lib/inch/language/nodejs/import.rb +8 -0
  106. data/lib/inch/language/nodejs/provider/jsdoc.rb +19 -0
  107. data/lib/inch/language/nodejs/provider/jsdoc/object.rb +55 -0
  108. data/lib/inch/language/nodejs/provider/jsdoc/object/base.rb +191 -0
  109. data/lib/inch/language/nodejs/provider/jsdoc/parser.rb +59 -0
  110. data/lib/inch/language/ruby/code_object/base.rb +197 -0
  111. data/lib/inch/language/ruby/code_object/class_object.rb +10 -0
  112. data/lib/inch/language/ruby/code_object/class_variable_object.rb +10 -0
  113. data/lib/inch/language/ruby/code_object/constant_object.rb +10 -0
  114. data/lib/inch/language/ruby/code_object/method_object.rb +85 -0
  115. data/lib/inch/language/ruby/code_object/method_parameter_object.rb +64 -0
  116. data/lib/inch/language/ruby/code_object/module_object.rb +10 -0
  117. data/lib/inch/language/ruby/code_object/namespace_object.rb +35 -0
  118. data/lib/inch/language/ruby/evaluation/base.rb +45 -0
  119. data/lib/inch/language/ruby/evaluation/class_object.rb +10 -0
  120. data/lib/inch/language/ruby/evaluation/class_variable_object.rb +21 -0
  121. data/lib/inch/language/ruby/evaluation/constant_object.rb +21 -0
  122. data/lib/inch/language/ruby/evaluation/method_object.rb +74 -0
  123. data/lib/inch/language/ruby/evaluation/module_object.rb +10 -0
  124. data/lib/inch/language/ruby/evaluation/namespace_object.rb +30 -0
  125. data/lib/inch/language/ruby/import.rb +34 -0
  126. data/lib/inch/language/ruby/provider/yard.rb +58 -0
  127. data/lib/inch/language/ruby/provider/yard/docstring.rb +162 -0
  128. data/lib/inch/language/ruby/provider/yard/nodoc_helper.rb +97 -0
  129. data/lib/inch/language/ruby/provider/yard/object.rb +63 -0
  130. data/lib/inch/language/ruby/provider/yard/object/base.rb +325 -0
  131. data/lib/inch/language/ruby/provider/yard/object/class_object.rb +14 -0
  132. data/lib/inch/language/ruby/provider/yard/object/class_variable_object.rb +14 -0
  133. data/lib/inch/language/ruby/provider/yard/object/constant_object.rb +14 -0
  134. data/lib/inch/language/ruby/provider/yard/object/method_object.rb +170 -0
  135. data/lib/inch/language/ruby/provider/yard/object/method_parameter_object.rb +94 -0
  136. data/lib/inch/language/ruby/provider/yard/object/method_signature.rb +120 -0
  137. data/lib/inch/language/ruby/provider/yard/object/module_object.rb +14 -0
  138. data/lib/inch/language/ruby/provider/yard/object/namespace_object.rb +46 -0
  139. data/lib/inch/language/ruby/provider/yard/object/root_object.rb +14 -0
  140. data/lib/inch/language/ruby/provider/yard/parser.rb +71 -0
  141. data/lib/inch/language/ruby/roles/base.rb +17 -0
  142. data/lib/inch/language/ruby/roles/class_variable.rb +53 -0
  143. data/lib/inch/language/ruby/roles/constant.rb +53 -0
  144. data/lib/inch/language/ruby/roles/method.rb +112 -0
  145. data/lib/inch/language/ruby/roles/method_parameter.rb +84 -0
  146. data/lib/inch/language/ruby/roles/missing.rb +24 -0
  147. data/lib/inch/language/ruby/roles/namespace.rb +89 -0
  148. data/lib/inch/language/ruby/roles/object.rb +120 -0
  149. data/lib/inch/rake.rb +2 -2
  150. data/lib/inch/rake/suggest.rb +7 -2
  151. data/lib/inch/utils/buffered_ui.rb +16 -0
  152. data/lib/inch/utils/shell_helper.rb +1 -1
  153. data/lib/inch/utils/ui.rb +5 -5
  154. data/lib/inch/utils/weighted_list.rb +2 -3
  155. data/lib/inch/version.rb +1 -1
  156. data/test/fixtures/{code_examples → ruby/code_examples}/lib/foo.rb +0 -0
  157. data/test/fixtures/{diff1 → ruby/diff1}/lib/diff1.rb +0 -0
  158. data/test/fixtures/{diff2 → ruby/diff2}/lib/diff2.rb +0 -0
  159. data/test/fixtures/{inch-yml → ruby/inch-yml}/.inch.yml +0 -0
  160. data/test/fixtures/{inch-yml → ruby/inch-yml}/foo/bar.rb +0 -0
  161. data/test/fixtures/{inch-yml → ruby/inch-yml}/foo/vendor/base.rb +0 -0
  162. data/test/fixtures/{parameters → ruby/parameters}/lib/foo.rb +0 -0
  163. data/test/fixtures/{readme → ruby/readme}/lib/foo.rb +0 -0
  164. data/test/fixtures/{really_good → ruby/really_good}/lib/foo.rb +0 -0
  165. data/test/fixtures/{really_good_pedantic → ruby/really_good_pedantic}/lib/foo.rb +0 -0
  166. data/test/fixtures/{simple → ruby/simple}/README +0 -0
  167. data/test/fixtures/{simple → ruby/simple}/lib/broken.rb +11 -19
  168. data/test/fixtures/ruby/simple/lib/broken_ruby_2_0_features.rb +7 -0
  169. data/test/fixtures/ruby/simple/lib/directives.rb +8 -0
  170. data/test/fixtures/{simple → ruby/simple}/lib/foo.rb +22 -1
  171. data/test/fixtures/{simple → ruby/simple}/lib/nodoc.rb +0 -0
  172. data/test/fixtures/{simple → ruby/simple}/lib/role_methods.rb +0 -0
  173. data/test/fixtures/{simple → ruby/simple}/lib/role_namespaces.rb +0 -0
  174. data/test/fixtures/{visibility → ruby/visibility}/lib/foo.rb +0 -0
  175. data/test/fixtures/{yardopts → ruby/yardopts}/.yardopts +0 -0
  176. data/test/fixtures/{yardopts → ruby/yardopts}/foo/bar.rb +0 -0
  177. data/test/integration/api/compare/codebases.rb +3 -3
  178. data/test/integration/cli/command/console_test.rb +6 -6
  179. data/test/integration/cli/command/diff_test.rb +62 -0
  180. data/test/integration/cli/command/inspect_test.rb +5 -6
  181. data/test/integration/cli/command/list_test.rb +4 -5
  182. data/test/integration/cli/command/show_test.rb +5 -5
  183. data/test/integration/cli/command/stats_test.rb +3 -3
  184. data/test/integration/cli/command/suggest_test.rb +13 -13
  185. data/test/integration/stats_options_test.rb +4 -4
  186. data/test/integration/visibility_options_test.rb +14 -14
  187. data/test/shared/base_list.rb +4 -3
  188. data/test/test_helper.rb +13 -13
  189. data/test/unit/api/filter_test.rb +7 -7
  190. data/test/unit/api/get_test.rb +1 -1
  191. data/test/unit/api/list_test.rb +1 -1
  192. data/test/unit/api/options/base_test.rb +3 -3
  193. data/test/unit/api/stats_test.rb +1 -1
  194. data/test/unit/api/suggest_test.rb +3 -3
  195. data/test/unit/cli/arguments_test.rb +2 -2
  196. data/test/unit/cli/command/base_test.rb +1 -1
  197. data/test/unit/cli/command/options/base_list_test.rb +2 -2
  198. data/test/unit/cli/command/options/base_object_test.rb +1 -1
  199. data/test/unit/cli/command/options/base_test.rb +1 -1
  200. data/test/unit/cli/command_parser_test.rb +3 -3
  201. data/test/unit/cli/trace_helper_test.rb +1 -1
  202. data/test/unit/cli/yardopts_helper_test.rb +6 -5
  203. data/test/unit/code_object/converter_test.rb +1 -1
  204. data/test/unit/code_object/provider_test.rb +2 -2
  205. data/test/unit/code_object/proxy_test.rb +2 -2
  206. data/test/unit/codebase/objects_test.rb +2 -2
  207. data/test/unit/codebase/proxy_test.rb +7 -5
  208. data/test/unit/config/codebase_test.rb +4 -4
  209. data/test/unit/config_test.rb +28 -0
  210. data/test/unit/evaluation/{role/base_test.rb → role_test.rb} +7 -7
  211. data/test/unit/{code_object/proxy → language/ruby/code_object}/method_object_test.rb +66 -21
  212. data/test/unit/{code_object → language/ruby}/provider/yard/docstring_test.rb +74 -38
  213. data/test/unit/{code_object → language/ruby}/provider/yard/nodoc_helper_test.rb +9 -7
  214. data/test/unit/{code_object → language/ruby}/provider/yard/object/method_object_test.rb +21 -11
  215. data/test/unit/language/ruby/provider/yard_test.rb +25 -0
  216. data/test/unit/utils/buffered_ui_test.rb +48 -0
  217. data/test/unit/utils/ui_test.rb +7 -7
  218. data/test/unit/utils/weighted_list_test.rb +7 -4
  219. metadata +139 -93
  220. data/lib/inch/code_object/provider/yard.rb +0 -57
  221. data/lib/inch/code_object/provider/yard/docstring.rb +0 -133
  222. data/lib/inch/code_object/provider/yard/nodoc_helper.rb +0 -93
  223. data/lib/inch/code_object/provider/yard/object.rb +0 -60
  224. data/lib/inch/code_object/provider/yard/object/base.rb +0 -302
  225. data/lib/inch/code_object/provider/yard/object/class_object.rb +0 -12
  226. data/lib/inch/code_object/provider/yard/object/class_variable_object.rb +0 -12
  227. data/lib/inch/code_object/provider/yard/object/constant_object.rb +0 -12
  228. data/lib/inch/code_object/provider/yard/object/method_object.rb +0 -153
  229. data/lib/inch/code_object/provider/yard/object/method_parameter_object.rb +0 -88
  230. data/lib/inch/code_object/provider/yard/object/method_signature.rb +0 -114
  231. data/lib/inch/code_object/provider/yard/object/module_object.rb +0 -12
  232. data/lib/inch/code_object/provider/yard/object/namespace_object.rb +0 -47
  233. data/lib/inch/code_object/provider/yard/object/root_object.rb +0 -12
  234. data/lib/inch/code_object/provider/yard/parser.rb +0 -62
  235. data/lib/inch/code_object/proxy/base.rb +0 -241
  236. data/lib/inch/code_object/proxy/class_object.rb +0 -8
  237. data/lib/inch/code_object/proxy/class_variable_object.rb +0 -8
  238. data/lib/inch/code_object/proxy/constant_object.rb +0 -8
  239. data/lib/inch/code_object/proxy/method_object.rb +0 -82
  240. data/lib/inch/code_object/proxy/method_parameter_object.rb +0 -60
  241. data/lib/inch/code_object/proxy/module_object.rb +0 -8
  242. data/lib/inch/code_object/proxy/namespace_object.rb +0 -33
  243. data/lib/inch/evaluation/object_schema.rb +0 -30
  244. data/lib/inch/evaluation/proxy/base.rb +0 -164
  245. data/lib/inch/evaluation/proxy/class_object.rb +0 -8
  246. data/lib/inch/evaluation/proxy/class_variable_object.rb +0 -19
  247. data/lib/inch/evaluation/proxy/constant_object.rb +0 -19
  248. data/lib/inch/evaluation/proxy/method_object.rb +0 -65
  249. data/lib/inch/evaluation/proxy/module_object.rb +0 -8
  250. data/lib/inch/evaluation/proxy/namespace_object.rb +0 -27
  251. data/lib/inch/evaluation/role/base.rb +0 -92
  252. data/lib/inch/evaluation/role/class_variable.rb +0 -55
  253. data/lib/inch/evaluation/role/constant.rb +0 -55
  254. data/lib/inch/evaluation/role/method.rb +0 -126
  255. data/lib/inch/evaluation/role/method_parameter.rb +0 -91
  256. data/lib/inch/evaluation/role/missing.rb +0 -20
  257. data/lib/inch/evaluation/role/namespace.rb +0 -85
  258. data/lib/inch/evaluation/role/object.rb +0 -143
  259. data/test/unit/code_object/provider/yard_test.rb +0 -25
@@ -0,0 +1,59 @@
1
+ require "json"
2
+ require "inch/language/nodejs/provider/jsdoc/object"
3
+
4
+ module Inch
5
+ module Language
6
+ module Nodejs
7
+ module Provider
8
+ module JSDoc
9
+ # Parses the source tree (using JSDoc)
10
+ class Parser
11
+ attr_reader :parsed_objects
12
+
13
+ # Helper method to parse an instance with the given +args+
14
+ #
15
+ # @see #parse
16
+ # @return [CodeObject::Provider::JSDoc::Parser] the instance that ran
17
+ def self.parse(*args)
18
+ parser = new
19
+ parser.parse(*args)
20
+ parser
21
+ end
22
+
23
+ # @param dir [String] directory
24
+ # @param config [Inch::Config::Codebase] configuration for codebase
25
+ # @return [void]
26
+ def parse(dir, config)
27
+ Dir.chdir(dir) do
28
+ parse_objects(config.included_files, config.excluded_files,
29
+ config.read_dump_file)
30
+ end
31
+ end
32
+
33
+ # @return [Array<YARD::Object::Base>]
34
+ def objects
35
+ pp @parsed_objects[10]
36
+ @objects ||= parsed_objects.map do |o|
37
+ JSDoc::Object.for(o) # unless IGNORE_TYPES.include?(o.type)
38
+ end.compact
39
+ puts "#{@objects.size} objects found."
40
+ puts "Rest of implementation: coming soon -.-"
41
+ exit 1
42
+ end
43
+
44
+ private
45
+
46
+ def parse_objects(paths, excluded, read_dump_file = nil)
47
+ if read_dump_file.nil?
48
+ output = %x(jsdoc --explain #{paths.join(' ')})
49
+ else
50
+ output = File.read(read_dump_file)
51
+ end
52
+ @parsed_objects = JSON[output]
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,197 @@
1
+ require "forwardable"
2
+
3
+ module Inch
4
+ module Language
5
+ module Ruby
6
+ # This is the base class for code object proxies.
7
+ # Code object proxies are via an attributes Hash and provide all methods
8
+ # necessary for the evaluation of its documentation.
9
+ #
10
+ # @abstract
11
+ module CodeObject
12
+ class Base < Inch::CodeObject::Proxy
13
+ def language
14
+ :ruby
15
+ end
16
+
17
+ # @return [Boolean] if the current object is an alias for something else
18
+ def alias?
19
+ !aliased_object.nil?
20
+ end
21
+
22
+ # @return [CodeObject::Proxy] the object the current object is an
23
+ # alias of
24
+ def aliased_object
25
+ object_lookup.find(self[:aliased_object_fullname])
26
+ end
27
+
28
+ # @return [Boolean] +true+ if the object has an @api tag
29
+ def api_tag?
30
+ self[:api_tag?]
31
+ end
32
+
33
+ # @return [Array] the children of the current object
34
+ def children
35
+ @children ||= self[:children_fullnames].map do |fullname|
36
+ object_lookup.find(fullname)
37
+ end
38
+ end
39
+
40
+ # @return [Boolean] +true+ if the object represents a constant
41
+ def constant?
42
+ self[:constant?]
43
+ end
44
+
45
+ def core?
46
+ self[:core?]
47
+ end
48
+
49
+ # The depth of the following is 4:
50
+ #
51
+ # Foo::Bar::Baz#initialize
52
+ # ^ ^ ^ ^
53
+ # 1 << 2 << 3 << 4
54
+ #
55
+ # +depth+ answers the question "how many layers of code objects are
56
+ # above this one?"
57
+ #
58
+ # @note top-level counts, that's why Foo has depth 1!
59
+ #
60
+ # @return [Fixnum] the depth of the object in terms of namespace
61
+ def depth
62
+ self[:depth]
63
+ end
64
+
65
+ # @return [Docstring]
66
+ def docstring
67
+ self[:docstring]
68
+ end
69
+
70
+ def files
71
+ self[:files]
72
+ end
73
+
74
+ # Returns the name of the file where the object is declared first
75
+ # @return [String] a filename
76
+ def filename
77
+ # just checking the first file (which is the file where an object
78
+ # is first declared)
79
+ files.first
80
+ end
81
+
82
+ # @return [String] the name of an object, e.g.
83
+ # "Docstring"
84
+ def name
85
+ self[:name]
86
+ end
87
+
88
+ # @return [String] the fully qualified name of an object, e.g.
89
+ # "Inch::CodeObject::Provider::YARD::Docstring"
90
+ def fullname
91
+ self[:fullname]
92
+ end
93
+
94
+ def has_alias?
95
+ !self[:aliases_fullnames].empty?
96
+ end
97
+
98
+ def has_children?
99
+ self[:has_children?]
100
+ end
101
+
102
+ def has_code_example?
103
+ self[:has_code_example?]
104
+ end
105
+
106
+ def has_doc?
107
+ self[:has_doc?]
108
+ end
109
+
110
+ def has_multiple_code_examples?
111
+ self[:has_multiple_code_examples?]
112
+ end
113
+
114
+ def has_unconsidered_tags?
115
+ self[:has_unconsidered_tags?]
116
+ end
117
+
118
+ def in_root?
119
+ self[:in_root?]
120
+ end
121
+
122
+ # @return [Boolean] +true+ if the object represents a method
123
+ def method?
124
+ self[:method?]
125
+ end
126
+
127
+ # @return [Boolean] +true+ if the object represents a namespace
128
+ def namespace?
129
+ self[:namespace?]
130
+ end
131
+
132
+ def original_docstring
133
+ self[:original_docstring]
134
+ end
135
+
136
+ # @return [Boolean] +true+ if the object was tagged not to be documented
137
+ def nodoc?
138
+ self[:nodoc?]
139
+ end
140
+
141
+ # @return [CodeObject::Proxy,nil] the parent of the current object
142
+ # or +nil+
143
+ def parent
144
+ object_lookup.find(self[:parent_fullname])
145
+ end
146
+
147
+ def private?
148
+ self[:private?]
149
+ end
150
+
151
+ # @return [Boolean]
152
+ # +true+ if the object or its parent is tagged as @private
153
+ def tagged_as_private?
154
+ self[:tagged_as_private?]
155
+ end
156
+
157
+ # @return [Boolean]
158
+ # +true+ if the object or its parent is tagged as part of an
159
+ # internal api
160
+ def tagged_as_internal_api?
161
+ self[:tagged_as_internal_api?]
162
+ end
163
+
164
+ def protected?
165
+ self[:protected?]
166
+ end
167
+
168
+ def public?
169
+ self[:public?]
170
+ end
171
+
172
+ def source
173
+ self[:source]
174
+ end
175
+
176
+ def type
177
+ self.class.to_s.gsub(/Object$/, "")
178
+ end
179
+
180
+ # @return [Boolean] +true+ if the object has no documentation at all
181
+ def undocumented?
182
+ self[:undocumented?]
183
+ end
184
+
185
+ # @return [Fixnum] the amount of tags not considered for this object
186
+ def unconsidered_tag_count
187
+ self[:unconsidered_tag_count]
188
+ end
189
+
190
+ def visibility
191
+ self[:visibility]
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end
@@ -0,0 +1,10 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module CodeObject
5
+ class ClassObject < NamespaceObject
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module CodeObject
5
+ class ClassVariableObject < Base
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module CodeObject
5
+ class ConstantObject < Base
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,85 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module CodeObject
5
+ # Proxy class for methods
6
+ class MethodObject < Base
7
+ def constructor?
8
+ self[:constructor?]
9
+ end
10
+
11
+ def bang_name?
12
+ self[:bang_name?]
13
+ end
14
+
15
+ def getter?
16
+ self[:getter?]
17
+ end
18
+
19
+ def has_parameters?
20
+ !parameters.empty?
21
+ end
22
+
23
+ MANY_PARAMETERS_THRESHOLD = 3
24
+ def has_many_parameters?
25
+ parameters.size > MANY_PARAMETERS_THRESHOLD
26
+ end
27
+
28
+ MANY_LINES_THRESHOLD = 20
29
+ def has_many_lines?
30
+ # for now, this includes the 'def' line and comments
31
+ if source
32
+ size = source.lines.count
33
+ size > MANY_LINES_THRESHOLD
34
+ else
35
+ false
36
+ end
37
+ end
38
+
39
+ def parameter(name)
40
+ parameters.find { |p| p.name == name.to_s }
41
+ end
42
+
43
+ def parameters
44
+ @parameters ||= self[:parameters].map do |param_attr|
45
+ MethodParameterObject.new(param_attr)
46
+ end
47
+ end
48
+
49
+ def overridden?
50
+ self[:overridden?]
51
+ end
52
+
53
+ def overridden_method
54
+ @overridden_method ||=
55
+ object_lookup.find(self[:overridden_method_fullname])
56
+ end
57
+
58
+ def return_mentioned?
59
+ self[:return_mentioned?]
60
+ end
61
+
62
+ def return_described?
63
+ self[:return_described?]
64
+ end
65
+
66
+ def return_typed?
67
+ self[:return_typed?]
68
+ end
69
+
70
+ def setter?
71
+ self[:setter?]
72
+ end
73
+
74
+ def source
75
+ self[:source?]
76
+ end
77
+
78
+ def questioning_name?
79
+ self[:questioning_name?]
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,64 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module CodeObject
5
+ # Proxy class for method parameters
6
+ class MethodParameterObject
7
+ def initialize(attributes)
8
+ @attributes = attributes
9
+ end
10
+
11
+ def [](key)
12
+ @attributes[key]
13
+ end
14
+
15
+ BAD_NAME_EXCEPTIONS = %w(id)
16
+ BAD_NAME_THRESHOLD = 3
17
+
18
+ # @return [Boolean] +true+ if the name of the parameter is
19
+ # uncommunicative
20
+ def bad_name?
21
+ return false if BAD_NAME_EXCEPTIONS.include?(name)
22
+ name.size < BAD_NAME_THRESHOLD || name =~ /[0-9]$/
23
+ end
24
+
25
+ # @return [Boolean] +true+ if the parameter is a block
26
+ def block?
27
+ self[:block?]
28
+ end
29
+
30
+ # @return [Boolean] +true+ if an additional description given?
31
+ def described?
32
+ self[:described?]
33
+ end
34
+
35
+ # @return [Boolean] +true+ if the parameter is mentioned in the docs
36
+ def mentioned?
37
+ self[:mentioned?]
38
+ end
39
+
40
+ def name
41
+ self[:name]
42
+ end
43
+ alias_method :fullname, :name
44
+
45
+ # @return [Boolean] +true+ if the parameter is a splat argument
46
+ def splat?
47
+ self[:splat?]
48
+ end
49
+
50
+ # @return [Boolean] +true+ if the type of the parameter is defined
51
+ def typed?
52
+ self[:typed?]
53
+ end
54
+
55
+ # @return [Boolean] +true+ if the parameter is mentioned in the docs,
56
+ # but not present in the method's signature
57
+ def wrongly_mentioned?
58
+ self[:wrongly_mentioned?]
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,10 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module CodeObject
5
+ class ModuleObject < NamespaceObject
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end