Class: Rubycop::Analyzer::Policy
- Inherits:
-
Object
- Object
- Rubycop::Analyzer::Policy
- Defined in:
- lib/rubycop/analyzer/policy.rb
Constant Summary collapse
- CALL_BLACKLIST =
%w[ abort alias_method at_exit autoload binding callcc caller class_eval const_get const_set eval exec exit fail fork gets global_variables instance_eval load loop method module_eval open readline readlines redo remove_const require send set_trace_func sleep spawn srand syscall system trap undef __callee__ __method__ ].to_set.freeze
- KEYWORD_WHITELIST =
%w[ false nil self true ].to_set.freeze
Instance Method Summary collapse
- #blacklist_const(const) ⇒ Object
- #const_allowed?(const) ⇒ Boolean
-
#initialize ⇒ Policy
constructor
A new instance of Policy.
- #inspect ⇒ Object
- #visit(node) ⇒ Object
- #visit_Alias(node) ⇒ Object
- #visit_Args(node) ⇒ Object
- #visit_Array(node) ⇒ Object
- #visit_Assoc(node) ⇒ Object
- #visit_Binary(node) ⇒ Object
- #visit_Block(node) ⇒ Object
- #visit_Call(node) ⇒ Object
- #visit_Case(node) ⇒ Object
- #visit_ChainedBlock(node) ⇒ Object
- #visit_Char(node) ⇒ Object
- #visit_Class(node) ⇒ Object
- #visit_ClassVariable(node) ⇒ Object
- #visit_ClassVariableAssignment(node) ⇒ Object
- #visit_Constant(node) ⇒ Object
- #visit_ConstantAssignment(node) ⇒ Object
- #visit_Defined(node) ⇒ Object
- #visit_Else(node) ⇒ Object
- #visit_ExecutableString(node) ⇒ Object
- #visit_Float(node) ⇒ Object
- #visit_For(node) ⇒ Object
- #visit_GlobalVariable(node) ⇒ Object
- #visit_GlobalVariableAssignment(node) ⇒ Object
- #visit_Hash(node) ⇒ Object
- #visit_Identifier(node) ⇒ Object
- #visit_If(node) ⇒ Object (also: #visit_Unless)
- #visit_IfMod(node) ⇒ Object (also: #visit_UnlessMod)
- #visit_IfOp(node) ⇒ Object
- #visit_InstanceVariable(node) ⇒ Object
- #visit_InstanceVariableAssignment(node) ⇒ Object
- #visit_Integer(node) ⇒ Object
- #visit_Keyword(node) ⇒ Object
- #visit_Label(node) ⇒ Object
- #visit_LocalVariableAssignment(node) ⇒ Object
- #visit_Method(node) ⇒ Object
- #visit_Module(node) ⇒ Object
- #visit_MultiAssignment(node) ⇒ Object
- #visit_MultiAssignmentList(node) ⇒ Object
- #visit_Params(node) ⇒ Object
- #visit_Program(node) ⇒ Object
- #visit_Range(node) ⇒ Object
- #visit_RescueMod(node) ⇒ Object
- #visit_RescueParams(node) ⇒ Object
- #visit_SingletonClass(node) ⇒ Object
- #visit_SplatArg(node) ⇒ Object
- #visit_Statements(node) ⇒ Object
- #visit_String(node) ⇒ Object
- #visit_StringConcat(node) ⇒ Object
- #visit_Symbol(node) ⇒ Object
- #visit_Unary(node) ⇒ Object
- #visit_Until(node) ⇒ Object (also: #visit_UntilMod)
- #visit_When(node) ⇒ Object
- #visit_While(node) ⇒ Object (also: #visit_WhileMod)
- #whitelist_const(const) ⇒ Object
Constructor Details
Instance Method Details
#blacklist_const(const) ⇒ Object
15 16 17 |
# File 'lib/rubycop/analyzer/policy.rb', line 15 def blacklist_const(const) @const_list.blacklist(const) end |
#const_allowed?(const) ⇒ Boolean
19 20 21 |
# File 'lib/rubycop/analyzer/policy.rb', line 19 def const_allowed?(const) @const_list.allow?(const) end |
#inspect ⇒ Object
11 12 13 |
# File 'lib/rubycop/analyzer/policy.rb', line 11 def inspect '#<%s:0x%x>' % [self.class.name, object_id] end |
#visit(node) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/rubycop/analyzer/policy.rb', line 27 def visit(node) klass = node.class.ancestors.detect do |ancestor| respond_to?("visit_#{ancestor.name.split('::').last}") end if klass send("visit_#{klass.name.split('::').last}", node) else warn "unhandled node type: #{node.inspect}:#{node.class.name}" true end end |
#visit_Alias(node) ⇒ Object
39 40 41 |
# File 'lib/rubycop/analyzer/policy.rb', line 39 def visit_Alias(node) false # never allowed end |
#visit_Args(node) ⇒ Object
43 44 45 |
# File 'lib/rubycop/analyzer/policy.rb', line 43 def visit_Args(node) node.elements.all? { |e| visit(e) } end |
#visit_Array(node) ⇒ Object
47 48 49 |
# File 'lib/rubycop/analyzer/policy.rb', line 47 def visit_Array(node) node.elements.all? { |e| visit(e) } end |
#visit_Assoc(node) ⇒ Object
51 52 53 |
# File 'lib/rubycop/analyzer/policy.rb', line 51 def visit_Assoc(node) visit(node.key) && visit(node.value) end |
#visit_Binary(node) ⇒ Object
55 56 57 |
# File 'lib/rubycop/analyzer/policy.rb', line 55 def visit_Binary(node) visit(node.lvalue) && visit(node.rvalue) end |
#visit_Block(node) ⇒ Object
59 60 61 |
# File 'lib/rubycop/analyzer/policy.rb', line 59 def visit_Block(node) (node.params.nil? || visit(node.params)) && node.elements.all? { |e| visit(e) } end |
#visit_Call(node) ⇒ Object
105 106 107 |
# File 'lib/rubycop/analyzer/policy.rb', line 105 def visit_Call(node) !CALL_BLACKLIST.include?(node.identifier.token.to_s) && [node.target, node.arguments, node.block].compact.all? { |e| visit(e) } end |
#visit_Case(node) ⇒ Object
109 110 111 |
# File 'lib/rubycop/analyzer/policy.rb', line 109 def visit_Case(node) visit(node.expression) && visit(node.block) end |
#visit_ChainedBlock(node) ⇒ Object
113 114 115 |
# File 'lib/rubycop/analyzer/policy.rb', line 113 def visit_ChainedBlock(node) node.elements.all? { |e| visit(e) } && node.blocks.all? { |e| visit(e) } && (node.params.nil? || visit(node.params)) end |
#visit_Char(node) ⇒ Object
129 130 131 |
# File 'lib/rubycop/analyzer/policy.rb', line 129 def visit_Char(node) true end |
#visit_Class(node) ⇒ Object
117 118 119 |
# File 'lib/rubycop/analyzer/policy.rb', line 117 def visit_Class(node) visit(node.const) && (node.superclass.nil? || visit(node.superclass)) && visit(node.body) end |
#visit_ClassVariable(node) ⇒ Object
121 122 123 |
# File 'lib/rubycop/analyzer/policy.rb', line 121 def visit_ClassVariable(node) false # never allowed end |
#visit_ClassVariableAssignment(node) ⇒ Object
125 126 127 |
# File 'lib/rubycop/analyzer/policy.rb', line 125 def visit_ClassVariableAssignment(node) false # never allowed end |
#visit_Constant(node) ⇒ Object
133 134 135 |
# File 'lib/rubycop/analyzer/policy.rb', line 133 def visit_Constant(node) const_allowed?(node.token) end |
#visit_ConstantAssignment(node) ⇒ Object
137 138 139 |
# File 'lib/rubycop/analyzer/policy.rb', line 137 def visit_ConstantAssignment(node) visit(node.lvalue) && visit(node.rvalue) end |
#visit_Defined(node) ⇒ Object
141 142 143 |
# File 'lib/rubycop/analyzer/policy.rb', line 141 def visit_Defined(node) false # never allowed (though it's probably safe) end |
#visit_Else(node) ⇒ Object
145 146 147 |
# File 'lib/rubycop/analyzer/policy.rb', line 145 def visit_Else(node) node.elements.all? { |e| visit(e) } end |
#visit_ExecutableString(node) ⇒ Object
149 150 151 |
# File 'lib/rubycop/analyzer/policy.rb', line 149 def visit_ExecutableString(node) false # never allowed end |
#visit_Float(node) ⇒ Object
153 154 155 |
# File 'lib/rubycop/analyzer/policy.rb', line 153 def visit_Float(node) true end |
#visit_For(node) ⇒ Object
157 158 159 |
# File 'lib/rubycop/analyzer/policy.rb', line 157 def visit_For(node) visit(node.variable) && visit(node.range) && visit(node.statements) end |
#visit_GlobalVariable(node) ⇒ Object
161 162 163 |
# File 'lib/rubycop/analyzer/policy.rb', line 161 def visit_GlobalVariable(node) false # never allowed end |
#visit_GlobalVariableAssignment(node) ⇒ Object
165 166 167 |
# File 'lib/rubycop/analyzer/policy.rb', line 165 def visit_GlobalVariableAssignment(node) false # never allowed end |
#visit_Hash(node) ⇒ Object
169 170 171 |
# File 'lib/rubycop/analyzer/policy.rb', line 169 def visit_Hash(node) node.assocs.nil? || node.assocs.all? { |e| visit(e) } end |
#visit_Identifier(node) ⇒ Object
173 174 175 |
# File 'lib/rubycop/analyzer/policy.rb', line 173 def visit_Identifier(node) !CALL_BLACKLIST.include?(node.token) end |
#visit_If(node) ⇒ Object Also known as: visit_Unless
177 178 179 |
# File 'lib/rubycop/analyzer/policy.rb', line 177 def visit_If(node) visit(node.expression) && node.elements.all? { |e| visit(e) } && node.blocks.all? { |e| visit(e) } end |
#visit_IfMod(node) ⇒ Object Also known as: visit_UnlessMod
182 183 184 |
# File 'lib/rubycop/analyzer/policy.rb', line 182 def visit_IfMod(node) visit(node.expression) && node.elements.all? { |e| visit(e) } end |
#visit_IfOp(node) ⇒ Object
187 188 189 |
# File 'lib/rubycop/analyzer/policy.rb', line 187 def visit_IfOp(node) visit(node.condition) && visit(node.then_part) && visit(node.else_part) end |
#visit_InstanceVariable(node) ⇒ Object
191 192 193 |
# File 'lib/rubycop/analyzer/policy.rb', line 191 def visit_InstanceVariable(node) true end |
#visit_InstanceVariableAssignment(node) ⇒ Object
195 196 197 |
# File 'lib/rubycop/analyzer/policy.rb', line 195 def visit_InstanceVariableAssignment(node) visit(node.rvalue) end |
#visit_Integer(node) ⇒ Object
199 200 201 |
# File 'lib/rubycop/analyzer/policy.rb', line 199 def visit_Integer(node) true end |
#visit_Keyword(node) ⇒ Object
210 211 212 |
# File 'lib/rubycop/analyzer/policy.rb', line 210 def visit_Keyword(node) KEYWORD_WHITELIST.include?(node.token) end |
#visit_Label(node) ⇒ Object
214 215 216 |
# File 'lib/rubycop/analyzer/policy.rb', line 214 def visit_Label(node) true end |
#visit_LocalVariableAssignment(node) ⇒ Object
218 219 220 |
# File 'lib/rubycop/analyzer/policy.rb', line 218 def visit_LocalVariableAssignment(node) visit(node.rvalue) end |
#visit_Method(node) ⇒ Object
222 223 224 |
# File 'lib/rubycop/analyzer/policy.rb', line 222 def visit_Method(node) [node.target, node.params, node.body].compact.all? { |e| visit(e) } end |
#visit_Module(node) ⇒ Object
226 227 228 |
# File 'lib/rubycop/analyzer/policy.rb', line 226 def visit_Module(node) visit(node.const) && visit(node.body) end |
#visit_MultiAssignment(node) ⇒ Object
230 231 232 |
# File 'lib/rubycop/analyzer/policy.rb', line 230 def visit_MultiAssignment(node) visit(node.lvalue) && visit(node.rvalue) end |
#visit_MultiAssignmentList(node) ⇒ Object
234 235 236 |
# File 'lib/rubycop/analyzer/policy.rb', line 234 def visit_MultiAssignmentList(node) node.elements.all? { |e| visit(e) } end |
#visit_Params(node) ⇒ Object
238 239 240 |
# File 'lib/rubycop/analyzer/policy.rb', line 238 def visit_Params(node) node.elements.all? { |e| visit(e) } end |
#visit_Program(node) ⇒ Object
242 243 244 |
# File 'lib/rubycop/analyzer/policy.rb', line 242 def visit_Program(node) node.elements.all? { |e| visit(e) } end |
#visit_Range(node) ⇒ Object
246 247 248 |
# File 'lib/rubycop/analyzer/policy.rb', line 246 def visit_Range(node) visit(node.min) && visit(node.max) end |
#visit_RescueMod(node) ⇒ Object
250 251 252 |
# File 'lib/rubycop/analyzer/policy.rb', line 250 def visit_RescueMod(node) node.elements.all? { |e| visit(e) } && visit(node.expression) end |
#visit_RescueParams(node) ⇒ Object
254 255 256 |
# File 'lib/rubycop/analyzer/policy.rb', line 254 def visit_RescueParams(node) node.elements.all? { |e| visit(e) } end |
#visit_SingletonClass(node) ⇒ Object
258 259 260 |
# File 'lib/rubycop/analyzer/policy.rb', line 258 def visit_SingletonClass(node) visit(node.superclass) && visit(node.body) end |
#visit_SplatArg(node) ⇒ Object
262 263 264 |
# File 'lib/rubycop/analyzer/policy.rb', line 262 def visit_SplatArg(node) visit(node.arg) end |
#visit_Statements(node) ⇒ Object
266 267 268 |
# File 'lib/rubycop/analyzer/policy.rb', line 266 def visit_Statements(node) node.elements.all? { |e| visit(e) } end |
#visit_String(node) ⇒ Object
270 271 272 273 |
# File 'lib/rubycop/analyzer/policy.rb', line 270 def visit_String(node) # embedded strings can have statements in them, so check those node.elements.reject { |e| e.is_a?(::String) }.all? { |e| visit(e) } end |
#visit_StringConcat(node) ⇒ Object
275 276 277 |
# File 'lib/rubycop/analyzer/policy.rb', line 275 def visit_StringConcat(node) node.elements.all? { |e| visit(e) } end |
#visit_Symbol(node) ⇒ Object
279 280 281 |
# File 'lib/rubycop/analyzer/policy.rb', line 279 def visit_Symbol(node) true end |
#visit_Unary(node) ⇒ Object
283 284 285 |
# File 'lib/rubycop/analyzer/policy.rb', line 283 def visit_Unary(node) visit(node.operand) end |
#visit_Until(node) ⇒ Object Also known as: visit_UntilMod
287 288 289 |
# File 'lib/rubycop/analyzer/policy.rb', line 287 def visit_Until(node) false # never allowed end |
#visit_When(node) ⇒ Object
292 293 294 |
# File 'lib/rubycop/analyzer/policy.rb', line 292 def visit_When(node) visit(node.expression) && node.elements.all? { |e| visit(e) } end |
#visit_While(node) ⇒ Object Also known as: visit_WhileMod
296 297 298 |
# File 'lib/rubycop/analyzer/policy.rb', line 296 def visit_While(node) false # never allowed end |
#whitelist_const(const) ⇒ Object
23 24 25 |
# File 'lib/rubycop/analyzer/policy.rb', line 23 def whitelist_const(const) @const_list.whitelist(const) end |