spektr 0.5.3 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67409372de77e0e8bf4117c53e8589c393250ce270720735e6f306aabe97dd3f
4
- data.tar.gz: db4149f62a076ae7ce005b72a3daf1e9cbbf26d860f092ff8e0259923c4736bb
3
+ metadata.gz: 3856f34c87bf7f347c90149e5cc0a824e68d80df6c6a4704a204e4862ea3e54b
4
+ data.tar.gz: f0c98f054f09841c3de0e7f756c80537b5d0a409a2fe0a70d555b63715958691
5
5
  SHA512:
6
- metadata.gz: 05c35aff0fb9d5453585f302febdcdfe1e5a778925cc59caa958a1a41ad8b4de657bb1f9ff47aa895f0cc382c09accc731cd0095fbf51b5a7c33dad4c1bbc137
7
- data.tar.gz: 1a9ccf43fc043a6d66574d195a45ee6351c0fe98937928a17f3452e4ad184dd70565fc878f63f5008475cc3ae07740665fa8e624b327b2734e6855af45de04a1
6
+ metadata.gz: fb99134225086acbaab6417f03594c7cb1b44893bdd413faf5056d3990afdd8e6bea3812c6a5a61344fc518e7d47b78bdbe49dfdb49e75722f6c5303df43101a
7
+ data.tar.gz: 7c20a2d6f2ec1a7c1a5e006b2ce4bb41e527a55fae099fd66d4e120f7fdffd9c6849496269abd998226f303b4602b5ac23b703a8be448abcd851a4f25bdb974a
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.5.4
6
+
7
+ * more parser fixes
8
+
9
+
5
10
  ## 0.5.3
6
11
 
7
12
  * parser fixes
@@ -54,11 +54,11 @@ module Spektr
54
54
  return true if user_input?(argument)
55
55
  end
56
56
  end
57
- when :embedded_statements_node, :if_node, :else_node
57
+ when :embedded_statements_node, :if_node, :else_node, :case_node, :embedded_variable_node
58
58
  node.statements.body.each do |item|
59
59
  return true if user_input? item
60
60
  end
61
- when :interpolated_string_node, :interpolated_x_string_node, :interpolated_symbol_node
61
+ when :interpolated_string_node, :interpolated_x_string_node, :interpolated_symbol_node, :interpolated_regular_expression_node
62
62
  node.parts.each do |part|
63
63
  return true if user_input?(part)
64
64
  end
@@ -93,32 +93,79 @@ module Spektr
93
93
  end
94
94
  return if variable && variable.location.start_line == node.location.start_line
95
95
  return user_input?(variable)
96
- when :local_variable_or_write_node
96
+ when :instance_variable_or_write_node, :local_variable_or_write_node
97
97
  return user_input?(node.value)
98
+ when :instance_variable_write_node, :local_variable_write_node
99
+ return user_input? node.value
98
100
  when :and_node, :or_node
99
101
  return user_input?(node.left)
100
102
  return user_input?(node.right)
101
- when :instance_variable_write_node, :local_variable_write_node
102
- return user_input? node.value
103
103
  when :splat_node
104
104
  return user_input? node.expression
105
105
  when :parentheses_node
106
106
  node.body.body.each do |item|
107
107
  return user_input? item
108
108
  end
109
- when :string_node, :symbol_node, :constant_read_node, :integer_node, :true_node, :constant_path_node, :nil_node, :true_node, :false_node, :self_node, :global_variable_read_node
109
+ when :string_node, :symbol_node, :constant_read_node, :integer_node, :true_node, :constant_path_node, :nil_node, :true_node, :false_node, :self_node, :global_variable_read_node, :and_node
110
110
  # do nothing
111
111
  else
112
- raise "Unknown argument type #{node.type.inspect} #{node.inspect}"
112
+ Spektr::Logger.debug "Unknown argument type #{node.type.inspect} #{node.inspect}"
113
113
  end
114
114
  false
115
115
  end
116
116
 
117
117
  # TODO: this doesn't work properly
118
118
  def model_attribute?(node)
119
+ return false if node.nil?
119
120
  model_names = @app.models.collect(&:name)
120
121
  case node.type
121
- when :local_variable_read_node, :instance_variable_read_node
122
+ when :call_node
123
+ return model_attribute?(node.receiver) if node.receiver
124
+ if node.arguments
125
+ node.arguments.arguments.each do |argument|
126
+ return true if model_attribute?(argument)
127
+ end
128
+ end
129
+ when :embedded_statements_node, :if_node, :else_node, :case_node, :embedded_variable_node
130
+ node.statements.body.each do |item|
131
+ return true if model_attribute? item
132
+ end
133
+ when :interpolated_string_node, :interpolated_x_string_node, :interpolated_symbol_node, :interpolated_regular_expression_node
134
+ node.parts.each do |part|
135
+ return true if model_attribute?(part)
136
+ end
137
+ when :keyword_hash_node, :hash_node
138
+ node.elements.each do |element|
139
+ return true if model_attribute?(element.key)
140
+ return true if model_attribute?(element.value)
141
+ end
142
+ when :array_node
143
+ node.elements.each do |element|
144
+ return true if model_attribute?(element)
145
+ end
146
+ # TODO: make this better. ivars can be overridden in the view as well and
147
+ # can be set in non controller targets too
148
+ when :_instance_variable_read_node
149
+ return false unless @target.respond_to?(:view_path)
150
+ actions = []
151
+ @app.controllers.each do |controller|
152
+ actions = actions.concat controller.actions.select { |action|
153
+ action.template == @target.view_path
154
+ }
155
+ end
156
+ actions.each do |action|
157
+ next unless action.body
158
+ action.body.each do |exp|
159
+ return true if exp.name == node.name && model_attribute?(exp)
160
+ end
161
+ end
162
+ when :local_variable_read_node
163
+ variable = @target.lvars.find do |n|
164
+ n.name == node.name
165
+ end
166
+ return if variable && variable.location.start_line == node.location.start_line
167
+ return model_attribute?(variable)
168
+ when :instance_variable_read_node
122
169
  # TODO: handle helpers here too
123
170
  if ["Spektr::Targets::Controller", "Spektr::Targets::View"].include?(@target.class.name)
124
171
  actions = []
@@ -134,53 +181,25 @@ module Spektr
134
181
  end
135
182
  end
136
183
  end
137
- when :local_variable_or_write_node
184
+ when :instance_variable_or_write, :local_variable_or_write_node
138
185
  return model_attribute?(node.value)
186
+ when :instance_variable_write_node, :local_variable_write_node
187
+ return model_attribute? node.value
139
188
  when :and_node, :or_node
140
189
  return model_attribute?(node.left)
141
190
  return model_attribute?(node.right)
142
- when :call_node
143
- return model_attribute?(node.receiver) if node.receiver
144
- if node.arguments
145
- node.arguments.arguments.each do |argument|
146
- return true if model_attribute?(argument)
147
- end
148
- end
149
- when :keyword_hash_node, :hash_node
150
- node.elements.each do |element|
151
- return true if model_attribute?(element.key)
152
- return true if model_attribute?(element.value)
153
- end
154
- when :array_node
155
- node.elements.each do |element|
156
- return true if model_attribute?(element)
157
- end
191
+ when :splat_node
192
+ return model_attribute? node.expression
158
193
  when :parentheses_node
159
194
  node.body.body.each do |item|
160
195
  return model_attribute? item
161
196
  end
162
- when :interpolated_string_node, :interpolated_x_string_node, :interpolated_symbol_node
163
- node.parts.each do |part|
164
- return true if model_attribute?(part)
165
- end
166
- when :embedded_statements_node, :if_node, :else_node
167
- node.statements.body.each do |item|
168
- return true if model_attribute? item
169
- end
170
- when :instance_variable_write_node, :local_variable_write_node
171
- return model_attribute? node.value
172
197
  when :constant_read_node
173
198
  return true if model_names.include? node.name.to_s
174
- when :interpolated_string_node
175
- node.parts.each do |item|
176
- return model_attribute? item
177
- end
178
- when :splat_node
179
- return model_attribute? node.expression
180
199
  when :string_node, :symbol_node, :integer_node, :constant_path_node, :nil_node, :true_node, :false_node, :self_node, :global_variable_read_node
181
200
  # do nothing
182
201
  else
183
- raise "Unknown argument type #{node.type}"
202
+ Spektr::Logger.debug "Unknown argument type #{node.type}"
184
203
  end
185
204
  end
186
205
 
@@ -1,3 +1,3 @@
1
1
  module Spektr
2
- VERSION = '0.5.3'
2
+ VERSION = '0.5.4'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spektr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Molnar