3 from .ast_validator import RuleCollection, rule
4 from lib.utils import Schema
6 class SyntaxRule(RuleCollection):
7 NodeAssigment = Schema(ast.Subscript,
8 value=Schema(ast.Name, id='__lzLut__'),
11 TrivialReturn = Schema(Schema.Union(
19 @rule(ast.If, None, "dynamic-logic")
20 def __dynamic_logic(self, reducer, node):
22 Conditional branching could interfering dependency resolving
26 @rule(ast.While, None, "while-loop")
27 def __while_loop(self, reducer, node):
29 loop construct may impact with readability.
33 @rule(ast.For, None, "for-loop")
34 def __for_loop(self, reducer, node):
36 loop construct may impact with readability.
40 @rule(ast.ClassDef, None, "class-def")
41 def __class_definition(self, reducer, node):
43 use of custom class is not recommended
47 @rule(ast.Dict, None, "complex-struct")
48 def __complex_datastruct(self, reducer, node):
50 use of complex data structure is not recommended
54 @rule(ast.Subscript, NodeAssigment, "side-effect-option")
55 def __side_effect(self, reducer, node):
57 Option modifying other options dynamically unpredictable behaviour
61 @rule(ast.Return, None, "non-trivial-value")
62 def __nontrivial_return(self, reducer, node):
64 Use of non-trivial value as default value
66 return SyntaxRule.TrivialReturn == node.value