reek 6.0.3 → 6.0.4

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 (217) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -1
  3. data/CONTRIBUTING.md +3 -0
  4. data/Dockerfile +1 -1
  5. data/Gemfile +6 -6
  6. data/lib/reek/ast/ast_node_class_map.rb +1 -1
  7. data/lib/reek/report/code_climate/code_climate_formatter.rb +1 -3
  8. data/lib/reek/smell_detectors/base_detector.rb +1 -1
  9. data/lib/reek/smell_warning.rb +1 -1
  10. data/lib/reek/source/source_locator.rb +1 -3
  11. data/lib/reek/version.rb +1 -1
  12. data/reek.gemspec +4 -1
  13. metadata +3 -208
  14. data/docs/API.md +0 -174
  15. data/docs/Attribute.md +0 -39
  16. data/docs/Basic-Smell-Options.md +0 -85
  17. data/docs/Boolean-Parameter.md +0 -54
  18. data/docs/Class-Variable.md +0 -40
  19. data/docs/Code-Smells.md +0 -39
  20. data/docs/Command-Line-Options.md +0 -119
  21. data/docs/Control-Couple.md +0 -26
  22. data/docs/Control-Parameter.md +0 -32
  23. data/docs/Data-Clump.md +0 -46
  24. data/docs/Duplicate-Method-Call.md +0 -264
  25. data/docs/Feature-Envy.md +0 -93
  26. data/docs/How-To-Write-New-Detectors.md +0 -132
  27. data/docs/How-reek-works-internally.md +0 -114
  28. data/docs/Instance-Variable-Assumption.md +0 -163
  29. data/docs/Irresponsible-Module.md +0 -47
  30. data/docs/Large-Class.md +0 -16
  31. data/docs/Long-Parameter-List.md +0 -39
  32. data/docs/Long-Yield-List.md +0 -37
  33. data/docs/Manual-Dispatch.md +0 -30
  34. data/docs/Missing-Safe-Method.md +0 -92
  35. data/docs/Module-Initialize.md +0 -62
  36. data/docs/Nested-Iterators.md +0 -59
  37. data/docs/Nil-Check.md +0 -47
  38. data/docs/RSpec-matchers.md +0 -129
  39. data/docs/Rake-Task.md +0 -66
  40. data/docs/Reek-4-to-Reek-5-migration.md +0 -188
  41. data/docs/Reek-Driven-Development.md +0 -46
  42. data/docs/Repeated-Conditional.md +0 -47
  43. data/docs/Simulated-Polymorphism.md +0 -16
  44. data/docs/Smell-Suppression.md +0 -96
  45. data/docs/Style-Guide.md +0 -19
  46. data/docs/Subclassed-From-Core-Class.md +0 -79
  47. data/docs/Too-Many-Constants.md +0 -37
  48. data/docs/Too-Many-Instance-Variables.md +0 -43
  49. data/docs/Too-Many-Methods.md +0 -56
  50. data/docs/Too-Many-Statements.md +0 -54
  51. data/docs/Uncommunicative-Method-Name.md +0 -94
  52. data/docs/Uncommunicative-Module-Name.md +0 -92
  53. data/docs/Uncommunicative-Name.md +0 -18
  54. data/docs/Uncommunicative-Parameter-Name.md +0 -90
  55. data/docs/Uncommunicative-Variable-Name.md +0 -96
  56. data/docs/Unused-Parameters.md +0 -28
  57. data/docs/Unused-Private-Method.md +0 -101
  58. data/docs/Utility-Function.md +0 -56
  59. data/docs/Versioning-Policy.md +0 -7
  60. data/docs/YAML-Reports.md +0 -93
  61. data/docs/defaults.reek.yml +0 -129
  62. data/docs/templates/default/docstring/html/public_api_marker.erb +0 -3
  63. data/docs/templates/default/docstring/setup.rb +0 -35
  64. data/docs/templates/default/fulldoc/html/css/common.css +0 -1
  65. data/docs/yard_plugin.rb +0 -17
  66. data/features/command_line_interface/basic_usage.feature +0 -15
  67. data/features/command_line_interface/options.feature +0 -123
  68. data/features/command_line_interface/show_progress.feature +0 -33
  69. data/features/command_line_interface/smell_selection.feature +0 -15
  70. data/features/command_line_interface/smells_count.feature +0 -38
  71. data/features/command_line_interface/stdin.feature +0 -65
  72. data/features/configuration_files/accept_setting.feature +0 -87
  73. data/features/configuration_files/directory_specific_directives.feature +0 -274
  74. data/features/configuration_files/exclude_directives.feature +0 -35
  75. data/features/configuration_files/exclude_paths_directives.feature +0 -42
  76. data/features/configuration_files/masking_smells.feature +0 -94
  77. data/features/configuration_files/mix_accept_reject_setting.feature +0 -84
  78. data/features/configuration_files/reject_setting.feature +0 -89
  79. data/features/configuration_files/schema_validation.feature +0 -59
  80. data/features/configuration_files/show_configuration_file.feature +0 -44
  81. data/features/configuration_files/unused_private_method.feature +0 -68
  82. data/features/configuration_loading.feature +0 -91
  83. data/features/configuration_via_source_comments/erroneous_source_comments.feature +0 -68
  84. data/features/configuration_via_source_comments/well_formed_source_comments.feature +0 -116
  85. data/features/locales.feature +0 -32
  86. data/features/programmatic_access.feature +0 -41
  87. data/features/rake_task/rake_task.feature +0 -138
  88. data/features/reports/codeclimate.feature +0 -59
  89. data/features/reports/json.feature +0 -59
  90. data/features/reports/reports.feature +0 -219
  91. data/features/reports/yaml.feature +0 -52
  92. data/features/rspec_matcher.feature +0 -41
  93. data/features/samples.feature +0 -305
  94. data/features/step_definitions/.rubocop.yml +0 -5
  95. data/features/step_definitions/reek_steps.rb +0 -102
  96. data/features/step_definitions/sample_file_steps.rb +0 -63
  97. data/features/support/env.rb +0 -33
  98. data/features/todo_list.feature +0 -108
  99. data/samples/checkstyle.xml +0 -7
  100. data/samples/clean_source/clean.rb +0 -6
  101. data/samples/configuration/accepts_rejects_and_excludes_for_detectors.reek.yml +0 -29
  102. data/samples/configuration/accepts_rejects_and_excludes_for_directory_directives.reek.yml +0 -30
  103. data/samples/configuration/corrupt.reek +0 -1
  104. data/samples/configuration/empty.reek +0 -0
  105. data/samples/configuration/full_configuration.reek +0 -13
  106. data/samples/configuration/full_mask.reek +0 -6
  107. data/samples/configuration/home/home.reek.yml +0 -4
  108. data/samples/configuration/partial_mask.reek +0 -4
  109. data/samples/configuration/regular_configuration/.reek.yml +0 -4
  110. data/samples/configuration/regular_configuration/empty_sub_directory/.gitignore +0 -0
  111. data/samples/configuration/with_excluded_paths.reek +0 -5
  112. data/samples/no_config_file/.keep +0 -0
  113. data/samples/paths.rb +0 -5
  114. data/samples/smelly_source/inline.rb +0 -704
  115. data/samples/smelly_source/optparse.rb +0 -1788
  116. data/samples/smelly_source/redcloth.rb +0 -1130
  117. data/samples/smelly_source/ruby.rb +0 -368
  118. data/samples/smelly_source/smelly.rb +0 -7
  119. data/samples/source_with_exclude_paths/ignore_me/uncommunicative_method_name.rb +0 -5
  120. data/samples/source_with_exclude_paths/nested/ignore_me_as_well/irresponsible_module.rb +0 -2
  121. data/samples/source_with_exclude_paths/nested/uncommunicative_parameter_name.rb +0 -6
  122. data/samples/source_with_exclude_paths/nested/uncommunicative_variable_name.rb +0 -6
  123. data/samples/source_with_hidden_directories/.hidden/hidden.rb +0 -1
  124. data/samples/source_with_hidden_directories/not_hidden.rb +0 -1
  125. data/samples/source_with_non_ruby_files/gibberish +0 -1
  126. data/samples/source_with_non_ruby_files/python_source.py +0 -1
  127. data/samples/source_with_non_ruby_files/ruby.rb +0 -6
  128. data/spec/performance/reek/smell_detectors/runtime_speed_spec.rb +0 -15
  129. data/spec/quality/documentation_spec.rb +0 -41
  130. data/spec/quality/reek_source_spec.rb +0 -11
  131. data/spec/reek/ast/node_spec.rb +0 -211
  132. data/spec/reek/ast/object_refs_spec.rb +0 -83
  133. data/spec/reek/ast/reference_collector_spec.rb +0 -47
  134. data/spec/reek/ast/sexp_extensions_spec.rb +0 -498
  135. data/spec/reek/cli/application_spec.rb +0 -168
  136. data/spec/reek/cli/command/report_command_spec.rb +0 -44
  137. data/spec/reek/cli/command/todo_list_command_spec.rb +0 -86
  138. data/spec/reek/cli/options_spec.rb +0 -51
  139. data/spec/reek/cli/silencer_spec.rb +0 -28
  140. data/spec/reek/code_comment_spec.rb +0 -184
  141. data/spec/reek/configuration/app_configuration_spec.rb +0 -195
  142. data/spec/reek/configuration/configuration_file_finder_spec.rb +0 -230
  143. data/spec/reek/configuration/default_directive_spec.rb +0 -13
  144. data/spec/reek/configuration/directory_directives_spec.rb +0 -122
  145. data/spec/reek/configuration/excluded_paths_spec.rb +0 -25
  146. data/spec/reek/configuration/rake_task_converter_spec.rb +0 -33
  147. data/spec/reek/configuration/schema_validator_spec.rb +0 -165
  148. data/spec/reek/context/code_context_spec.rb +0 -192
  149. data/spec/reek/context/ghost_context_spec.rb +0 -60
  150. data/spec/reek/context/method_context_spec.rb +0 -72
  151. data/spec/reek/context/module_context_spec.rb +0 -55
  152. data/spec/reek/context/root_context_spec.rb +0 -12
  153. data/spec/reek/context/statement_counter_spec.rb +0 -24
  154. data/spec/reek/context_builder_spec.rb +0 -457
  155. data/spec/reek/detector_repository_spec.rb +0 -22
  156. data/spec/reek/documentation_link_spec.rb +0 -20
  157. data/spec/reek/errors/base_error_spec.rb +0 -13
  158. data/spec/reek/examiner_spec.rb +0 -309
  159. data/spec/reek/logging_error_handler_spec.rb +0 -24
  160. data/spec/reek/rake/task_spec.rb +0 -56
  161. data/spec/reek/report/code_climate/code_climate_configuration_spec.rb +0 -22
  162. data/spec/reek/report/code_climate/code_climate_fingerprint_spec.rb +0 -126
  163. data/spec/reek/report/code_climate/code_climate_formatter_spec.rb +0 -51
  164. data/spec/reek/report/code_climate/code_climate_report_spec.rb +0 -56
  165. data/spec/reek/report/html_report_spec.rb +0 -19
  166. data/spec/reek/report/json_report_spec.rb +0 -58
  167. data/spec/reek/report/location_formatter_spec.rb +0 -32
  168. data/spec/reek/report/progress_formatter_spec.rb +0 -68
  169. data/spec/reek/report/text_report_spec.rb +0 -89
  170. data/spec/reek/report/xml_report_spec.rb +0 -24
  171. data/spec/reek/report/yaml_report_spec.rb +0 -55
  172. data/spec/reek/report_spec.rb +0 -28
  173. data/spec/reek/smell_configuration_spec.rb +0 -56
  174. data/spec/reek/smell_detectors/attribute_spec.rb +0 -197
  175. data/spec/reek/smell_detectors/base_detector_spec.rb +0 -50
  176. data/spec/reek/smell_detectors/boolean_parameter_spec.rb +0 -93
  177. data/spec/reek/smell_detectors/class_variable_spec.rb +0 -106
  178. data/spec/reek/smell_detectors/control_parameter_spec.rb +0 -300
  179. data/spec/reek/smell_detectors/data_clump_spec.rb +0 -134
  180. data/spec/reek/smell_detectors/duplicate_method_call_spec.rb +0 -211
  181. data/spec/reek/smell_detectors/feature_envy_spec.rb +0 -295
  182. data/spec/reek/smell_detectors/instance_variable_assumption_spec.rb +0 -96
  183. data/spec/reek/smell_detectors/irresponsible_module_spec.rb +0 -226
  184. data/spec/reek/smell_detectors/long_parameter_list_spec.rb +0 -61
  185. data/spec/reek/smell_detectors/long_yield_list_spec.rb +0 -49
  186. data/spec/reek/smell_detectors/manual_dispatch_spec.rb +0 -75
  187. data/spec/reek/smell_detectors/missing_safe_method_spec.rb +0 -68
  188. data/spec/reek/smell_detectors/module_initialize_spec.rb +0 -77
  189. data/spec/reek/smell_detectors/nested_iterators_spec.rb +0 -333
  190. data/spec/reek/smell_detectors/nil_check_spec.rb +0 -100
  191. data/spec/reek/smell_detectors/repeated_conditional_spec.rb +0 -100
  192. data/spec/reek/smell_detectors/subclassed_from_core_class_spec.rb +0 -77
  193. data/spec/reek/smell_detectors/too_many_constants_spec.rb +0 -144
  194. data/spec/reek/smell_detectors/too_many_instance_variables_spec.rb +0 -132
  195. data/spec/reek/smell_detectors/too_many_methods_spec.rb +0 -54
  196. data/spec/reek/smell_detectors/too_many_statements_spec.rb +0 -90
  197. data/spec/reek/smell_detectors/uncommunicative_method_name_spec.rb +0 -78
  198. data/spec/reek/smell_detectors/uncommunicative_module_name_spec.rb +0 -78
  199. data/spec/reek/smell_detectors/uncommunicative_parameter_name_spec.rb +0 -147
  200. data/spec/reek/smell_detectors/uncommunicative_variable_name_spec.rb +0 -201
  201. data/spec/reek/smell_detectors/unused_parameters_spec.rb +0 -114
  202. data/spec/reek/smell_detectors/unused_private_method_spec.rb +0 -205
  203. data/spec/reek/smell_detectors/utility_function_spec.rb +0 -309
  204. data/spec/reek/smell_warning_spec.rb +0 -137
  205. data/spec/reek/source/source_code_spec.rb +0 -79
  206. data/spec/reek/source/source_locator_spec.rb +0 -166
  207. data/spec/reek/spec/should_reek_of_spec.rb +0 -153
  208. data/spec/reek/spec/should_reek_only_of_spec.rb +0 -91
  209. data/spec/reek/spec/should_reek_spec.rb +0 -52
  210. data/spec/reek/spec/smell_matcher_spec.rb +0 -87
  211. data/spec/reek/tree_dresser_spec.rb +0 -46
  212. data/spec/spec_helper.rb +0 -110
  213. data/tasks/configuration.rake +0 -18
  214. data/tasks/console.rake +0 -5
  215. data/tasks/reek.rake +0 -6
  216. data/tasks/rubocop.rake +0 -11
  217. data/tasks/test.rake +0 -32
@@ -1,368 +0,0 @@
1
- module CodeRay
2
- module Scanners
3
-
4
- # This scanner is really complex, since Ruby _is_ a complex language!
5
- #
6
- # It tries to highlight 100% of all common code,
7
- # and 90% of strange codes.
8
- #
9
- # It is optimized for HTML highlighting, and is not very useful for
10
- # parsing or pretty printing.
11
- #
12
- # For now, I think it's better than the scanners in VIM or Syntax, or
13
- # any highlighter I was able to find, except Caleb's RubyLexer.
14
- #
15
- # I hope it's also better than the rdoc/irb lexer.
16
- class Ruby < Scanner
17
-
18
- include Streamable
19
-
20
- register_for :ruby
21
- file_extension 'rb'
22
-
23
- helper :patterns
24
-
25
- private
26
- def scan_tokens tokens, options
27
- last_token_dot = false
28
- value_expected = true
29
- heredocs = nil
30
- last_state = nil
31
- state = :initial
32
- depth = nil
33
- inline_block_stack = []
34
-
35
- patterns = Patterns # avoid constant lookup
36
-
37
- until eos?
38
- match = nil
39
- kind = nil
40
-
41
- if state.instance_of? patterns::StringState
42
- # {{{
43
- match = scan_until(state.pattern) || scan_until(/\z/)
44
- tokens << [match, :content] unless match.empty?
45
- break if eos?
46
-
47
- if state.heredoc and self[1] # end of heredoc
48
- match = getch.to_s
49
- match << scan_until(/$/) unless eos?
50
- tokens << [match, :delimiter]
51
- tokens << [:close, state.type]
52
- state = state.next_state
53
- next
54
- end
55
-
56
- case match = getch
57
-
58
- when state.delim
59
- if state.paren
60
- state.paren_depth -= 1
61
- if state.paren_depth > 0
62
- tokens << [match, :nesting_delimiter]
63
- next
64
- end
65
- end
66
- tokens << [match, :delimiter]
67
- if state.type == :regexp and not eos?
68
- modifiers = scan(/#{patterns::REGEXP_MODIFIERS}/ox)
69
- tokens << [modifiers, :modifier] unless modifiers.empty?
70
- end
71
- tokens << [:close, state.type]
72
- value_expected = false
73
- state = state.next_state
74
-
75
- when '\\'
76
- if state.interpreted
77
- if esc = scan(/ #{patterns::ESCAPE} /ox)
78
- tokens << [match + esc, :char]
79
- else
80
- tokens << [match, :error]
81
- end
82
- else
83
- case m = getch
84
- when state.delim, '\\'
85
- tokens << [match + m, :char]
86
- when nil
87
- tokens << [match, :error]
88
- else
89
- tokens << [match + m, :content]
90
- end
91
- end
92
-
93
- when '#'
94
- case peek(1)
95
- when '{'
96
- inline_block_stack << [state, depth, heredocs]
97
- value_expected = true
98
- state = :initial
99
- depth = 1
100
- tokens << [:open, :inline]
101
- tokens << [match + getch, :inline_delimiter]
102
- when '$', '@'
103
- tokens << [match, :escape]
104
- last_state = state # scan one token as normal code, then return here
105
- state = :initial
106
- else
107
- raise_inspect 'else-case # reached; #%p not handled' % peek(1), tokens
108
- end
109
-
110
- when state.paren
111
- state.paren_depth += 1
112
- tokens << [match, :nesting_delimiter]
113
-
114
- when /#{patterns::REGEXP_SYMBOLS}/ox
115
- tokens << [match, :function]
116
-
117
- else
118
- raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], tokens
119
-
120
- end
121
- next
122
- # }}}
123
- else
124
- # {{{
125
- if match = scan(/[ \t\f]+/)
126
- kind = :space
127
- match << scan(/\s*/) unless eos? or heredocs
128
- tokens << [match, kind]
129
- next
130
-
131
- elsif match = scan(/\\?\n/)
132
- kind = :space
133
- if match == "\n"
134
- value_expected = true # FIXME not quite true
135
- state = :initial if state == :undef_comma_expected
136
- end
137
- if heredocs
138
- unscan # heredoc scanning needs \n at start
139
- state = heredocs.shift
140
- tokens << [:open, state.type]
141
- heredocs = nil if heredocs.empty?
142
- next
143
- else
144
- match << scan(/\s*/) unless eos?
145
- end
146
- tokens << [match, kind]
147
- next
148
-
149
- elsif match = scan(/\#.*/) or
150
- ( bol? and match = scan(/#{patterns::RUBYDOC_OR_DATA}/o) )
151
- kind = :comment
152
- value_expected = true
153
- tokens << [match, kind]
154
- next
155
-
156
- elsif state == :initial
157
-
158
- # IDENTS #
159
- if match = scan(/#{patterns::METHOD_NAME}/o)
160
- if last_token_dot
161
- kind = if match[/^[A-Z]/] and not match?(/\(/) then :constant else :ident end
162
- else
163
- kind = patterns::IDENT_KIND[match]
164
- if kind == :ident and match[/^[A-Z]/] and not match[/[!?]$/] and not match?(/\(/)
165
- kind = :constant
166
- elsif kind == :reserved
167
- state = patterns::DEF_NEW_STATE[match]
168
- end
169
- end
170
- ## experimental!
171
- value_expected = :set if
172
- patterns::REGEXP_ALLOWED[match] or check(/#{patterns::VALUE_FOLLOWS}/o)
173
-
174
- elsif last_token_dot and match = scan(/#{patterns::METHOD_NAME_OPERATOR}/o)
175
- kind = :ident
176
- value_expected = :set if check(/#{patterns::VALUE_FOLLOWS}/o)
177
-
178
- # OPERATORS #
179
- elsif not last_token_dot and match = scan(/ \.\.\.? | (?:\.|::)() | [,\(\)\[\]\{\}] | ==?=? /x)
180
- if match !~ / [.\)\]\}] /x or match =~ /\.\.\.?/
181
- value_expected = :set
182
- end
183
- last_token_dot = :set if self[1]
184
- kind = :operator
185
- unless inline_block_stack.empty?
186
- case match
187
- when '{'
188
- depth += 1
189
- when '}'
190
- depth -= 1
191
- if depth == 0 # closing brace of inline block reached
192
- state, depth, heredocs = inline_block_stack.pop
193
- tokens << [match, :inline_delimiter]
194
- kind = :inline
195
- match = :close
196
- end
197
- end
198
- end
199
-
200
- elsif match = scan(/ ['"] /mx)
201
- tokens << [:open, :string]
202
- kind = :delimiter
203
- state = patterns::StringState.new :string, match == '"', match # important for streaming
204
-
205
- elsif match = scan(/#{patterns::INSTANCE_VARIABLE}/o)
206
- kind = :instance_variable
207
-
208
- elsif value_expected and match = scan(/\//)
209
- tokens << [:open, :regexp]
210
- kind = :delimiter
211
- interpreted = true
212
- state = patterns::StringState.new :regexp, interpreted, match
213
-
214
- elsif match = scan(/#{patterns::NUMERIC}/o)
215
- kind = if self[1] then :float else :integer end
216
-
217
- elsif match = scan(/#{patterns::SYMBOL}/o)
218
- case delim = match[1]
219
- when ?', ?"
220
- tokens << [:open, :symbol]
221
- tokens << [':', :symbol]
222
- match = delim.chr
223
- kind = :delimiter
224
- state = patterns::StringState.new :symbol, delim == ?", match
225
- else
226
- kind = :symbol
227
- end
228
-
229
- elsif match = scan(/ [-+!~^]=? | [*|&]{1,2}=? | >>? /x)
230
- value_expected = :set
231
- kind = :operator
232
-
233
- elsif value_expected and match = scan(/#{patterns::HEREDOC_OPEN}/o)
234
- indented = self[1] == '-'
235
- quote = self[3]
236
- delim = self[quote ? 4 : 2]
237
- kind = patterns::QUOTE_TO_TYPE[quote]
238
- tokens << [:open, kind]
239
- tokens << [match, :delimiter]
240
- match = :close
241
- heredoc = patterns::StringState.new kind, quote != '\'', delim, (indented ? :indented : :linestart )
242
- heredocs ||= [] # create heredocs if empty
243
- heredocs << heredoc
244
-
245
- elsif value_expected and match = scan(/#{patterns::FANCY_START_CORRECT}/o)
246
- kind, interpreted = *patterns::FancyStringType.fetch(self[1]) do
247
- raise_inspect 'Unknown fancy string: %%%p' % k, tokens
248
- end
249
- tokens << [:open, kind]
250
- state = patterns::StringState.new kind, interpreted, self[2]
251
- kind = :delimiter
252
-
253
- elsif value_expected and match = scan(/#{patterns::CHARACTER}/o)
254
- kind = :integer
255
-
256
- elsif match = scan(/ [\/%]=? | <(?:<|=>?)? | [?:;] /x)
257
- value_expected = :set
258
- kind = :operator
259
-
260
- elsif match = scan(/`/)
261
- if last_token_dot
262
- kind = :operator
263
- else
264
- tokens << [:open, :shell]
265
- kind = :delimiter
266
- state = patterns::StringState.new :shell, true, match
267
- end
268
-
269
- elsif match = scan(/#{patterns::GLOBAL_VARIABLE}/o)
270
- kind = :global_variable
271
-
272
- elsif match = scan(/#{patterns::CLASS_VARIABLE}/o)
273
- kind = :class_variable
274
-
275
- else
276
- kind = :error
277
- match = getch
278
-
279
- end
280
-
281
- elsif state == :def_expected
282
- state = :initial
283
- if match = scan(/(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o)
284
- kind = :method
285
- else
286
- next
287
- end
288
-
289
- elsif state == :undef_expected
290
- state = :undef_comma_expected
291
- if match = scan(/#{patterns::METHOD_NAME_EX}/o)
292
- kind = :method
293
- elsif match = scan(/#{patterns::SYMBOL}/o)
294
- case delim = match[1]
295
- when ?', ?"
296
- tokens << [:open, :symbol]
297
- tokens << [':', :symbol]
298
- match = delim.chr
299
- kind = :delimiter
300
- state = patterns::StringState.new :symbol, delim == ?", match
301
- state.next_state = :undef_comma_expected
302
- else
303
- kind = :symbol
304
- end
305
- else
306
- state = :initial
307
- next
308
- end
309
-
310
- elsif state == :undef_comma_expected
311
- if match = scan(/,/)
312
- kind = :operator
313
- state = :undef_expected
314
- else
315
- state = :initial
316
- next
317
- end
318
-
319
- elsif state == :module_expected
320
- if match = scan(/<</)
321
- kind = :operator
322
- else
323
- state = :initial
324
- if match = scan(/ (?:#{patterns::IDENT}::)* #{patterns::IDENT} /ox)
325
- kind = :class
326
- else
327
- next
328
- end
329
- end
330
-
331
- end
332
- # }}}
333
-
334
- value_expected = value_expected == :set
335
- last_token_dot = last_token_dot == :set
336
-
337
- if $DEBUG and not kind
338
- raise_inspect 'Error token %p in line %d' %
339
- [[match, kind], line], tokens, state
340
- end
341
- raise_inspect 'Empty token', tokens unless match
342
-
343
- tokens << [match, kind]
344
-
345
- if last_state
346
- state = last_state
347
- last_state = nil
348
- end
349
- end
350
- end
351
-
352
- inline_block_stack << [state] if state.is_a? patterns::StringState
353
- until inline_block_stack.empty?
354
- this_block = inline_block_stack.pop
355
- tokens << [:close, :inline] if this_block.size > 1
356
- state = this_block.first
357
- tokens << [:close, state.type]
358
- end
359
-
360
- tokens
361
- end
362
-
363
- end
364
-
365
- end
366
- end
367
-
368
- # vim:fdm=marker
@@ -1,7 +0,0 @@
1
- # Smelly class
2
- class Smelly
3
- # This will reek of UncommunicativeMethodName
4
- def x
5
- y = 10 # This will reek of UncommunicativeVariableName
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- # Klass comment.
2
- class Klass
3
- def m
4
- end
5
- end
@@ -1,6 +0,0 @@
1
- # Klass comment
2
- class Klass
3
- def method(a)
4
- a + @x
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- # Klass comment.
2
- class Klass
3
- def meth
4
- x = 5
5
- end
6
- end
@@ -1 +0,0 @@
1
- adfasfsadfasdfsafsad
@@ -1 +0,0 @@
1
- print("Hello, World!")
@@ -1,6 +0,0 @@
1
- # Klass comment
2
- class Klass
3
- def method(a)
4
- a + @x
5
- end
6
- end
@@ -1,15 +0,0 @@
1
- require_relative '../../../spec_helper'
2
- require_lib 'reek/examiner'
3
-
4
- RSpec.describe 'Runtime speed' do
5
- let(:source_directory) { SAMPLES_DIR.join('smelly_source') }
6
-
7
- it 'runs on our smelly sources in less than 5 seconds' do
8
- expect do
9
- Dir[source_directory.join('**/*.rb')].each do |entry|
10
- examiner = Reek::Examiner.new Pathname.new(entry)
11
- examiner.smells.size
12
- end
13
- end.to perform_under(5).sec
14
- end
15
- end
@@ -1,41 +0,0 @@
1
- require_relative '../spec_helper'
2
- require 'kramdown'
3
-
4
- RSpec.describe 'Documentation' do
5
- root = File.expand_path('../..', __dir__)
6
- files = Dir.glob(File.join(root, '*.md')) + Dir.glob(File.join(root, 'docs', '*.md'))
7
- code_types = [:codeblock, :codespan]
8
-
9
- files.each do |file|
10
- describe "from #{file}" do
11
- text = File.read(file)
12
- doc = Kramdown::Document.new(text, input: 'GFM')
13
- blocks = doc.root.children
14
-
15
- blocks.each do |block|
16
- # Only consider code blocks with language 'ruby'.
17
- next unless code_types.include?(block.type)
18
- next unless block.attr['class'] == 'language-ruby'
19
-
20
- it "has a valid sample at #{block.options[:location] + 1}" do
21
- code = block.value.strip
22
-
23
- # Replace lines of the form `<expression> # => <result>` with
24
- # assertions.
25
- #
26
- # For example,
27
- #
28
- # 2 + 2 # => 4
29
- #
30
- # will be replaced by
31
- #
32
- # assert_equal(4, 2 + 2)
33
- #
34
- spec_code = code.gsub(/(^.+) # ?=> (.+$)/, 'assert_equal(\2, \1)')
35
-
36
- eval spec_code # rubocop:disable Security/Eval
37
- end
38
- end
39
- end
40
- end
41
- end