@guyo13/langium-utils
v1.1.1
Published
Utilities for language development using Langium
Downloads
7
Readme
@guyo13/langium-utils
Utilities for language development using Langium. This library provides helpful functions to enhance your Langium-based language development workflows.
Features
- Validation Utilities: Simplify the implementation of custom property validators.
- Flexible Error Reporting: Easily customize validation messages and severity levels.
- Graph Traversal: Depth-first search traversal of a graph with node entry and exit hooks. More algorithms will be added in the future.
Installation
Install the package via npm:
npm install @guyo13/langium-utilsOr using pnpm:
pnpm add @guyo13/langium-utilsUsage
uniquePropertyValidator
This utility helps ensure that a specific property within a list of AstNodes has all unique values. It accepts custom error formatting and severity levels.
Parameters:
- nodes: An array of
AstNodesto validate. - propertyName: The property name to check for uniqueness.
- accept: A
ValidationAcceptorfor reporting validation errors. - formatter: A user defined function to format error messages.
- severity (optional): Severity of the validation message (
'error' | 'warning' | 'info' | 'hint'). Defaults to'error'.
traverseDFS
Traverses the input rootNode in a Depth-First order, keeping track on node entry and exit times.
Parameters:
rootNode: The node to start traversing from.getChildren: A callback which returns an iterable of child nodes given an input node.onEntry(optional): A callback which is called when a node is pulled out of the stack BEFORE its children are collected. Receives the node and its entry time.onExit(optional): A callback which is called AFTER a node's children have been traversed. Receives the node and its exit time.- Type Parameters:
T: The type of the nodes in the graph.
NodeState
A helper interface that can be used to wrap a graph node that is being traversed, adding a state of any type and memorized children array. This can be useful to store information about the nodes during traversal.
Properties:
node: The actual graph node.state: A user-defined state associated with the node.children(optional): An array of NodeState objects representing the children of the node. This can be populated during traversal.
