pss-langserver
Version:
A Language server for the Portable Stimulus Standard
172 lines (146 loc) • 5.81 kB
text/typescript
/*
* Copyright (C) 2025 Darshan(@thisisthedarshan)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { integer } from "vscode-languageserver/node";
import { enumItems, objType, params, PSSNode, traits } from "./dataTypes";
interface CompNode extends PSSNode {
type: objType.COMPONENT;
isPure: boolean;
templateParams: params[];
superSpec: string;
}
interface ActionNode extends PSSNode {
type: objType.ACTION;
isAbstract: boolean;
templateParams: params[];
superSpec: string;
}
interface InstanceNode extends PSSNode {
type: objType.INSTANCE | objType;
accessModifier: string;
instanceType: objType | string;
instanceDefaultValue: string; /* name of spec in register instances */
instanceArrayCount: number | string;
isRandom: boolean;
isStaticConst: boolean;
}
interface MemorySpaceNode extends PSSNode {
type: objType.MEMORY_SPACE;
memTraits: traits[];
}
interface MemoryRegionNode extends PSSNode {
type: objType.MEMORY_REGION;
size: integer;
address: bigint;
regionTraits: traits[];
}
interface RegisterCompNode extends PSSNode {
type: objType.REGISTER_COMP;
accessType: "READONLY" | "READWRITE" | "WRITEONLY";
registerLength: integer;
basedOnStruct: string;
}
interface RegisterGroupNode extends PSSNode {
type: objType.REGISTER_GROUP;
baseAddress: string;
}
interface RegisterBodyNode extends PSSNode {
type: objType.REGISTER_BODY_ITEM;
}
interface RegisterDefNode extends PSSNode {
type: objType.REGISTER_DEF;
accessType: "READONLY" | "READWRITE" | "WRITEONLY";
registerLength: integer;
basedOnStruct: string;
instanceArrayCount: integer;
}
interface ActivityNode extends PSSNode {
type: objType.ACTIVITY;
}
interface EnumNode extends PSSNode {
type: objType.ENUM;
dataType: string;
enumItems: enumItems[];
}
interface StructNode extends PSSNode {
type: objType.STRUCT | objType.BUFFER | objType.STATE | objType.STREAM | objType.RESOURCE_OBJECT;
templateParams: params[];
superSpec: string;
}
interface FunctionNode extends PSSNode {
type: objType.FUNCTION;
platformQualifier: "target" | "solve";
isPure: boolean;
isStatic: boolean;
returnType: string;
parameters: params[];
}
interface FlowReferenceFieldNode extends PSSNode {
type: objType.BUFFER | objType.STREAM | objType.STATE | objType.POOLS;
flowDirection: 'input' | 'output';
instanceArraySize: number | string;
}
interface ResourceReferenceFieldNode extends PSSNode {
type: objType.RESOURCE_OBJECT;
resourceLock: 'lock' | 'share';
instanceArraySize: number | string;
}
interface AddressNode extends PSSNode {
type: objType.ADDRESS_SPACE | objType.ADDRESS_REGION | objType.ADDRESS_CLAIM;
isRandom: boolean;
addressType: "contiguous" | "transparent";
traitsStruct: string;
size: number | string;
address: string;
regions: { [trait: string]: "allocatable" | "non-allocatable" }[]; /** For [identifier]: "allocatable | non-allocatable" */
additionalTraits: { [trait: string]: string }[];
}
interface ExecNode extends PSSNode {
type: objType.EXEC_PRESOLVE | objType.EXEC_POSTSOLVE | objType.EXEC_PREBODY | objType.EXEC_BODY | objType.EXEC_HEADER | objType.EXEC_DECLARATION | objType.EXEC_RUNSTART | objType.EXEC_RUNEND | objType.EXEC_INITDOWN | objType.EXEC_INITUP | objType.EXEC_INIT;
execType: "target" | "file" | "regular";
content: string; /** Only when language or filename is present */
}
interface PackageNode extends PSSNode {
type: objType.PACKAGE;
path: string; /** The identifiers after main identifier, which are preceded by scope operator */
}
interface StructKindNode extends PSSNode {
type: objType.STRUCT | objType.STREAM | objType.STATE | objType.RESOURCE_OBJECT;
template: params[];
superSpec: string;
}
interface TypedefDeclNode extends PSSNode {
type: objType.TYPEDEF;
dataType: string;
}
interface ImportsNode extends PSSNode {
type: objType.IMPORT;
importType: string; /* Contains if import is package, class or function */
features: string; /* Contains function prototype or imported functions */
}
interface AssignmentNode extends PSSNode {
type: objType.ASSIGNMENT;
operation: string; /* Assignment operation being performed */
value: string; /* This is the expression or calling function name */
dataType: string;
}
interface FunctionCallNode extends PSSNode {
type: objType.FUNCTION_CALL;
super: boolean;
refPath: string;
}
type PSSLangObjects = PSSNode | CompNode | ActionNode | InstanceNode | MemorySpaceNode | MemoryRegionNode | RegisterCompNode | RegisterGroupNode | RegisterBodyNode | RegisterDefNode | ActivityNode | EnumNode | StructNode | FunctionNode | FlowReferenceFieldNode | ResourceReferenceFieldNode | AddressNode | ExecNode | PackageNode | StructKindNode | TypedefDeclNode | ImportsNode | AssignmentNode | FunctionCallNode;
export { PSSLangObjects, CompNode, ActionNode, InstanceNode, MemorySpaceNode, MemoryRegionNode, RegisterCompNode, RegisterGroupNode, RegisterBodyNode, RegisterDefNode, ActivityNode, EnumNode, StructNode, FunctionNode, FlowReferenceFieldNode, ResourceReferenceFieldNode, AddressNode, ExecNode, PackageNode, StructKindNode, TypedefDeclNode, ImportsNode, AssignmentNode, FunctionCallNode };