openpectus.lang.exec.analyzer
Attributes
Classes
Create a collection of name/value pairs. |
|
Override by specific feature analyzers. |
|
Checks: |
|
Checks: |
|
Checks: |
|
Checks: |
|
Fills in node.has_only_trailing_whitespace for whitespace nodes. |
|
Checks: |
|
Checks same as ConditionCheckAnalyzer |
|
Checks: |
|
Checks: |
|
Facade that combines the check analyzers into a single analyzer. |
Module Contents
- openpectus.lang.exec.analyzer.logger
- class openpectus.lang.exec.analyzer.AnalyzerItemType(*args, **kwds)
Bases:
enum.EnumCreate a collection of name/value pairs.
Example enumeration:
>>> class Color(Enum): ... RED = 1 ... BLUE = 2 ... GREEN = 3
Access them by:
attribute access:
>>> Color.RED <Color.RED: 1>
value lookup:
>>> Color(1) <Color.RED: 1>
name lookup:
>>> Color['RED'] <Color.RED: 1>
Enumerations can be iterated over, and know how many members they have:
>>> len(Color) 3
>>> list(Color) [<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]
Methods can be added to enumerations, and members can have their own attributes – see the documentation for details.
- HINT = ('HINT',)
- INFO = ('INFO',)
- WARNING = ('WARNING',)
- ERROR = 'ERROR'
- class openpectus.lang.exec.analyzer.AnalyzerItem(id, message, node, type, description='', start=None, length=None, end=None, data=None)
- Parameters:
id (str)
message (str)
node (openpectus.lang.model.ast.Node | openpectus.lang.model.ast.NodeWithChildren | None)
type (AnalyzerItemType)
description (str)
start (int | None)
length (int | None)
end (int | None)
data (dict[str, str] | None)
- id: str
- message: str
- description: str = ''
- type: AnalyzerItemType
- node: openpectus.lang.model.ast.Node | None
- data
- __repr__()
- Return type:
str
- class openpectus.lang.exec.analyzer.AnalyzerVisitorBase
Bases:
openpectus.lang.exec.visitor.NodeVisitorOverride by specific feature analyzers.
- items: list[AnalyzerItem] = []
- __str__()
- Return type:
str
- add_item(item)
- Parameters:
item (AnalyzerItem)
- analyze(n)
Run analysis synchronously.
Note: This runs visit_ProgramNode(n) for ProgramNode, same way as interpreter. For interpretation, this differs from visit(n) but for analysis it should not make a difference.
- Parameters:
- class openpectus.lang.exec.analyzer.UnreachableCodeCheckAnalyzer
Bases:
AnalyzerVisitorBaseChecks: * Presence of code in a Block following End block command * Presence of code after “Stop” and “Restart” commands
- method_end: openpectus.lang.model.ast.EngineCommandNode | None = None
- first_command_after_end: openpectus.lang.model.ast.Node | None = None
- last_command_after_end: openpectus.lang.model.ast.Node | None = None
- create_item(node)
- Parameters:
- visit_BlockNode(node)
- Parameters:
- visit_EngineCommandNode(node)
- Parameters:
- visit_Node(node)
- Return type:
openpectus.lang.exec.visitor.NodeGenerator
- analyze(n)
Run analysis synchronously.
Note: This runs visit_ProgramNode(n) for ProgramNode, same way as interpreter. For interpretation, this differs from visit(n) but for analysis it should not make a difference.
- class openpectus.lang.exec.analyzer.InfiniteBlockCheckAnalyzer
Bases:
AnalyzerVisitorBaseChecks: * Block can potentially finish due to End block or End blocks
- create_item(node)
- Parameters:
- has_global_end = False
- requires_global_end: list[openpectus.lang.model.ast.Node] = []
- __str__()
- Return type:
str
- check_global_end_block(node)
- check_local_end_block(node)
- Parameters:
- visit_ProgramNode(node)
- Parameters:
- visit_BlockNode(node)
- Parameters:
- visit_EndBlockNode(node)
- Parameters:
- visit_EndBlocksNode(node)
- Parameters:
- visit_EngineCommandNode(node)
- Parameters:
- class openpectus.lang.exec.analyzer.IndentationCheckAnalyzer
Bases:
AnalyzerVisitorBaseChecks: * Presence of indentation error flag from parser
- create_item(node)
- Parameters:
- visit_Node(node)
- Parameters:
- Return type:
openpectus.lang.exec.visitor.NodeGenerator
- class openpectus.lang.exec.analyzer.ThresholdCheckAnalyzer
Bases:
AnalyzerVisitorBaseChecks: * Thresholds are ordered from smallest to largest.
- max_threshold_in_parent: dict[openpectus.lang.model.ast.Node, openpectus.lang.model.ast.Node]
- visit_Node(node)
- Parameters:
- Return type:
openpectus.lang.exec.visitor.NodeGenerator
- class openpectus.lang.exec.analyzer.WhitespaceCheckAnalyzer
Bases:
AnalyzerVisitorBaseFills in node.has_only_trailing_whitespace for whitespace nodes. This allows the interpreter to not advance over only white space/comments. This allows the use to edit these lines, e.g. append lines to a method while the methods is running.
- whitespace_nodes: list[openpectus.lang.model.ast.BlankNode | openpectus.lang.model.ast.CommentNode] = []
- is_whitespace_node(node)
- Parameters:
- visit_BlankNode(node)
- visit_CommentNode(node)
- visit_AlarmNode(node)
- visit_BlockNode(node)
- visit_ProgramNode(node)
- visit_WatchNode(node)
- visit_NodeWithChildren(node)
- Parameters:
- analyze(n)
Run analysis synchronously.
Note: This runs visit_ProgramNode(n) for ProgramNode, same way as interpreter. For interpretation, this differs from visit(n) but for analysis it should not make a difference.
- class openpectus.lang.exec.analyzer.ConditionCheckAnalyzer(tags)
Bases:
AnalyzerVisitorBaseChecks: * Condition is present for Watch and Alarm * Condition contains tag name * Spell check of given tag name * Given tag name is defined * Unit is not defined for compared tag without unit * Unit is defined for compared tag with unit * Given unit is defined * Given unit is compatible with given tag
- Parameters:
- tags
- __str__()
- Return type:
str
- visit_WatchNode(node)
- Parameters:
- visit_AlarmNode(node)
- Parameters:
- analyze_condition(node)
- Parameters:
- class openpectus.lang.exec.analyzer.SimulateCheckAnalyzer(tags)
Bases:
AnalyzerVisitorBaseChecks same as ConditionCheckAnalyzer
- Parameters:
- tags
- __str__()
- Return type:
str
- visit_SimulateOffNode(node)
- Parameters:
- visit_SimulateNode(node)
- Parameters:
- class openpectus.lang.exec.analyzer.CommandCheckAnalyzer(commands)
Bases:
AnalyzerVisitorBaseChecks: * Spell check of command name * Given command name is defined * Arguments pass validation given command argparser * Commands that don’t accept arguments don’t get arguments
- Parameters:
- commands
- __str__()
- Return type:
str
- visit_InterpreterCommandNode(node)
- Parameters:
- visit_EngineCommandNode(node)
- Parameters:
- visit_UodCommandNode(node)
- Parameters:
- visit_ErrorInstructionNode(node)
- check_command_node(node)
- Parameters:
- class openpectus.lang.exec.analyzer.MacroCheckAnalyzer
Bases:
AnalyzerVisitorBaseChecks: * “Macro” has an argument * “Call macro” has and argument * “Call macro” argument is a defined “Macro” * “Macro” is not left unused * Spell check of “Call macro” argument * “Macro” is redefined * Macro contains call to itself
- macros: dict[str, openpectus.lang.model.ast.MacroNode]
- macro_calls: list[openpectus.lang.model.ast.CallMacroNode] = []
- macros_registered: list[openpectus.lang.model.ast.MacroNode] = []
- macros_called: list[openpectus.lang.model.ast.MacroNode] = []
- visit_CallMacroNode(node)
- Parameters:
- visit_MacroNode(node)
- Parameters:
- analyze(n)
Run analysis synchronously.
Note: This runs visit_ProgramNode(n) for ProgramNode, same way as interpreter. For interpretation, this differs from visit(n) but for analysis it should not make a difference.
- class openpectus.lang.exec.analyzer.SemanticCheckAnalyzer(tags, commands)
Facade that combines the check analyzers into a single analyzer.
- Parameters:
- items: list[AnalyzerItem] = []
- analyzers: list[AnalyzerVisitorBase]
- __str__()
- Return type:
str
- analyze(program)
- Parameters:
program (openpectus.lang.model.ast.ProgramNode)
- property errors: list[AnalyzerItem]
- Return type:
list[AnalyzerItem]
- property warnings: list[AnalyzerItem]
- Return type:
list[AnalyzerItem]