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,46 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module Provider
5
+ module YARD
6
+ module Object
7
+ # a namespace object can have methods and other namespace objects
8
+ # inside itself (e.g. classes and modules)
9
+ class NamespaceObject < Base
10
+ def attributes
11
+ object.class_attributes.values + object.instance_attributes.values
12
+ end
13
+
14
+ def children_fullnames
15
+ children.map(&:fullname)
16
+ end
17
+
18
+ def namespace?
19
+ true
20
+ end
21
+
22
+ def has_methods?
23
+ children.any?(&:method?)
24
+ end
25
+
26
+ def pure_namespace?
27
+ children.all?(&:namespace?)
28
+ end
29
+
30
+ # called by MethodObject#getter?
31
+ def child(name)
32
+ children.find { |child| child.name == name } if children
33
+ end
34
+
35
+ def children
36
+ object.children.map do |o|
37
+ YARD::Object.for(o)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,14 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module Provider
5
+ module YARD
6
+ module Object
7
+ class RootObject < NamespaceObject
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,71 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module Provider
5
+ module YARD
6
+ # Parses the source tree (using YARD)
7
+ class Parser
8
+ IGNORE_TYPES = [:macro]
9
+
10
+ # Helper method to parse an instance with the given +args+
11
+ #
12
+ # @see #parse
13
+ # @return [CodeObject::Provider::YARD::Parser] the instance that ran
14
+ def self.parse(*args)
15
+ parser = new
16
+ parser.parse(*args)
17
+ parser
18
+ end
19
+
20
+ # @param dir [String] directory
21
+ # @param config [Inch::Config::Codebase] configuration for codebase
22
+ # @return [void]
23
+ def parse(dir, config)
24
+ Dir.chdir(dir) do
25
+ parse_yard_objects(config.included_files,
26
+ config.excluded_files,
27
+ config.read_dump_file)
28
+ inject_base_dir(dir)
29
+ end
30
+ end
31
+
32
+ # @return [Array<YARD::Object::Base>]
33
+ def objects
34
+ @objects ||= parsed_objects.map do |o|
35
+ YARD::Object.for(o) unless IGNORE_TYPES.include?(o.type)
36
+ end.compact
37
+ end
38
+
39
+ private
40
+
41
+ def parse_yard_objects(paths, excluded, read_dump_file = nil)
42
+ if read_dump_file.nil?
43
+ YARD::Object.clear_cache
44
+ ::YARD::Registry.clear
45
+ ::YARD.parse(paths, excluded)
46
+ else
47
+ puts "Ruby doesn't support the --read option."
48
+ exit 1
49
+ end
50
+ end
51
+
52
+ def inject_base_dir(dir)
53
+ objects.each do |object|
54
+ object.base_dir = dir
55
+
56
+ object.aliases_fullnames.each do |fullname|
57
+ alias_object = objects.find { |o| o.fullname == fullname }
58
+ alias_object.aliased_object_fullname = object.fullname
59
+ end
60
+ end
61
+ end
62
+
63
+ def parsed_objects
64
+ ::YARD::Registry.all
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,17 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module Evaluation
5
+ module Role
6
+ # @abstract
7
+ class Base < Inch::Evaluation::Role
8
+ # Returns the type of the +object+ that is being evaluated.
9
+ def object_type
10
+ object.class.to_s.split("::").last.gsub(/Object$/, "").downcase
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,53 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module Evaluation
5
+ module Role
6
+ # Roles assigned to class variables
7
+ module ClassVariable
8
+ class WithDoc < Object::WithDoc
9
+ applicable_if :has_doc?
10
+ end
11
+ class WithoutDoc < Object::WithoutDoc
12
+ applicable_unless :has_doc?
13
+ end
14
+
15
+ class TaggedAsNodoc < Object::TaggedAsNodoc
16
+ applicable_if :nodoc?
17
+ end
18
+ class InRoot < Object::InRoot
19
+ applicable_if :in_root?
20
+ end
21
+
22
+ class Public < Object::Public
23
+ applicable_if :public?
24
+ priority -1
25
+ end
26
+ class Private < Object::Private
27
+ applicable_if :private?
28
+ priority -3
29
+ end
30
+
31
+ class WithCodeExample < Object::WithCodeExample
32
+ applicable_if do |o|
33
+ o.has_code_example? && !o.has_multiple_code_examples?
34
+ end
35
+ end
36
+
37
+ class WithMultipleCodeExamples < Object::WithMultipleCodeExamples
38
+ applicable_if :has_multiple_code_examples?
39
+ end
40
+
41
+ class WithoutCodeExample < Object::WithoutCodeExample
42
+ applicable_unless :has_code_example?
43
+
44
+ def suggestion
45
+ nil
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,53 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module Evaluation
5
+ module Role
6
+ # Roles assigned to constants
7
+ module Constant
8
+ class WithDoc < Object::WithDoc
9
+ applicable_if :has_doc?
10
+ end
11
+ class WithoutDoc < Object::WithoutDoc
12
+ applicable_unless :has_doc?
13
+ end
14
+
15
+ class TaggedAsNodoc < Object::TaggedAsNodoc
16
+ applicable_if :nodoc?
17
+ end
18
+ class InRoot < Object::InRoot
19
+ applicable_if :in_root?
20
+ end
21
+
22
+ class Public < Object::Public
23
+ applicable_if :public?
24
+ priority -1
25
+ end
26
+ class Private < Object::Private
27
+ applicable_if :private?
28
+ priority -3
29
+ end
30
+
31
+ class WithCodeExample < Object::WithCodeExample
32
+ applicable_if do |o|
33
+ o.has_code_example? && !o.has_multiple_code_examples?
34
+ end
35
+ end
36
+
37
+ class WithMultipleCodeExamples < Object::WithMultipleCodeExamples
38
+ applicable_if :has_multiple_code_examples?
39
+ end
40
+
41
+ class WithoutCodeExample < Object::WithoutCodeExample
42
+ applicable_unless :has_code_example?
43
+
44
+ def suggestion
45
+ nil
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,112 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module Evaluation
5
+ module Role
6
+ module Method
7
+ # Role assigned to methods without parameters
8
+ class WithoutParameters < Base
9
+ applicable_unless :has_parameters?
10
+ end
11
+
12
+ # Role assigned to methods with many parameters
13
+ #
14
+ # @see CodeObject::Ruby::MethodObject#has_many_parameters?
15
+ class WithManyParameters < Base
16
+ applicable_if :has_many_parameters?
17
+ priority +2
18
+ end
19
+
20
+ # Role assigned to methods where the return value is typed in the docs
21
+ class WithReturnType < Base
22
+ applicable_if :return_typed?
23
+ end
24
+
25
+ # Role assigned to methods where the return value is not typed
26
+ class WithoutReturnType < Missing
27
+ applicable_unless :return_typed?
28
+
29
+ def suggestion
30
+ "Describe what '#{object.name}' returns"
31
+ end
32
+ end
33
+
34
+ # Role assigned to methods where the return value is decribed in the
35
+ # docs
36
+ class WithReturnDescription < Base
37
+ applicable_if :return_described?
38
+ end
39
+
40
+ # Role assigned to methods where the return value is not decribed
41
+ class WithoutReturnDescription < Missing
42
+ applicable_unless :return_described?
43
+
44
+ def suggestion
45
+ "Describe what '#{object.name}' returns"
46
+ end
47
+ end
48
+
49
+ # Role assigned to methods with many lines
50
+ #
51
+ # @see CodeObject::Ruby::MethodObject#has_many_lines?
52
+ class WithManyLines < Base
53
+ applicable_if :has_many_lines?
54
+ priority +2
55
+ end
56
+
57
+ # Role assigned to methods whose name end in a '!'
58
+ class WithBangName < Base
59
+ applicable_if :bang_name?
60
+ priority +3
61
+ end
62
+
63
+ # Role assigned to methods whose name end in a '?'
64
+ class WithQuestioningName < Base
65
+ applicable_if :questioning_name?
66
+ priority -4
67
+ end
68
+
69
+ # Role assigned to methods which are aliased
70
+ class HasAlias < Base
71
+ applicable_if :has_alias?
72
+ priority +2
73
+ end
74
+
75
+ # Role assigned to methods that are constructors
76
+ class Constructor < Base
77
+ applicable_if :constructor?
78
+ end
79
+
80
+ # Role assigned to methods that are getters
81
+ class Getter < Base
82
+ applicable_if :getter?
83
+ end
84
+
85
+ # Role assigned to methods that are setters
86
+ class Setter < Base
87
+ applicable_if :setter?
88
+ end
89
+
90
+ # Role assigned to methods that are overriding another method
91
+ class Overridden < Base
92
+ applicable_if :overridden?
93
+ # It seems more important to document the overridden method,
94
+ # than the overriding one
95
+ priority -2
96
+
97
+ # This role doesnot assign a score.
98
+ def score
99
+ nil
100
+ end
101
+
102
+ # This role sets a min_score.
103
+ def min_score
104
+ @value.to_f
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,84 @@
1
+ module Inch
2
+ module Language
3
+ module Ruby
4
+ module Evaluation
5
+ module Role
6
+ # Roles assigned to method parameters
7
+ #
8
+ # @note The +object+ is a MethodParameterObject here!
9
+ module MethodParameter
10
+ # Role assigned to parameters that are mentioned in the docs
11
+ #
12
+ # @see CodeObject::Ruby::MethodParameterObject#mentioned?
13
+ class WithMention < Base
14
+ applicable_if :mentioned?
15
+ end
16
+
17
+ # Role assigned to parameters that are not mentioned in the docs
18
+ #
19
+ # @see CodeObject::Ruby::MethodParameterObject#mentioned?
20
+ class WithoutMention < Missing
21
+ applicable_unless :mentioned?
22
+
23
+ def suggestion
24
+ "Describe the parameter '#{object.name}'"
25
+ end
26
+ end
27
+
28
+ # Role assigned to parameters that are typed in the docs
29
+ #
30
+ # @see CodeObject::Ruby::MethodParameterObject#typed?
31
+ class WithType < Base
32
+ applicable_if :typed?
33
+ end
34
+
35
+ # Role assigned to parameters that are not typed in the docs
36
+ #
37
+ # @see CodeObject::Ruby::MethodParameterObject#typed?
38
+ class WithoutType < Missing
39
+ applicable_unless :typed?
40
+ end
41
+
42
+ # Role assigned to parameters that are spalts, e.g. +*args+
43
+ #
44
+ # @see CodeObject::Ruby::MethodParameterObject#splat?
45
+ class Splat < Base
46
+ applicable_if :splat?
47
+ priority +1
48
+ end
49
+
50
+ # Role assigned to parameters that are blocks, e.g. +&block+
51
+ #
52
+ # @see CodeObject::Ruby::MethodParameterObject#block?
53
+ class Block < Base
54
+ applicable_if :block?
55
+ priority +1
56
+ end
57
+
58
+ # Role assigned to parameters that are documented, but not part of
59
+ # the method signature
60
+ #
61
+ # @see CodeObject::Ruby::MethodParameterObject#wrongly_mentioned?
62
+ class WithWrongMention < Base
63
+ applicable_if :wrongly_mentioned?
64
+ priority +1
65
+
66
+ def suggestion
67
+ "The parameter '#{object.name}' seems not to be part of the " \
68
+ "signature."
69
+ end
70
+ end
71
+
72
+ # Role assigned to parameters that have a 'bad' name
73
+ #
74
+ # @see CodeObject::Ruby::MethodParameterObject#bad_name?
75
+ class WithBadName < Base
76
+ applicable_if :bad_name?
77
+ priority +1
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end