plaxtony
Version:
Static code analysis of SC2 Galaxy Script
615 lines (614 loc) • 16.1 kB
TypeScript
import * as lsp from 'vscode-languageserver';
export declare const enum CharacterCodes {
nullCharacter = 0,
maxAsciiCharacter = 127,
lineFeed = 10,
carriageReturn = 13,
lineSeparator = 8232,
paragraphSeparator = 8233,
nextLine = 133,
space = 32,
nonBreakingSpace = 160,
enQuad = 8192,
emQuad = 8193,
enSpace = 8194,
emSpace = 8195,
threePerEmSpace = 8196,
fourPerEmSpace = 8197,
sixPerEmSpace = 8198,
figureSpace = 8199,
punctuationSpace = 8200,
thinSpace = 8201,
hairSpace = 8202,
zeroWidthSpace = 8203,
narrowNoBreakSpace = 8239,
ideographicSpace = 12288,
mathematicalSpace = 8287,
ogham = 5760,
_ = 95,
$ = 36,
_0 = 48,
_1 = 49,
_2 = 50,
_3 = 51,
_4 = 52,
_5 = 53,
_6 = 54,
_7 = 55,
_8 = 56,
_9 = 57,
a = 97,
b = 98,
c = 99,
d = 100,
e = 101,
f = 102,
g = 103,
h = 104,
i = 105,
j = 106,
k = 107,
l = 108,
m = 109,
n = 110,
o = 111,
p = 112,
q = 113,
r = 114,
s = 115,
t = 116,
u = 117,
v = 118,
w = 119,
x = 120,
y = 121,
z = 122,
A = 65,
B = 66,
C = 67,
D = 68,
E = 69,
F = 70,
G = 71,
H = 72,
I = 73,
J = 74,
K = 75,
L = 76,
M = 77,
N = 78,
O = 79,
P = 80,
Q = 81,
R = 82,
S = 83,
T = 84,
U = 85,
V = 86,
W = 87,
X = 88,
Y = 89,
Z = 90,
ampersand = 38,
asterisk = 42,
at = 64,
backslash = 92,
backtick = 96,
bar = 124,
caret = 94,
closeBrace = 125,
closeBracket = 93,
closeParen = 41,
colon = 58,
comma = 44,
dot = 46,
doubleQuote = 34,
equals = 61,
exclamation = 33,
greaterThan = 62,
hash = 35,
lessThan = 60,
minus = 45,
openBrace = 123,
openBracket = 91,
openParen = 40,
percent = 37,
plus = 43,
question = 63,
semicolon = 59,
singleQuote = 39,
slash = 47,
tilde = 126,
backspace = 8,
formFeed = 12,
byteOrderMark = 65279,
tab = 9,
verticalTab = 11
}
export declare const enum SyntaxKind {
Unknown = 0,
SingleLineCommentTrivia = 1,
NumericLiteral = 2,
StringLiteral = 3,
OpenBraceToken = 4,
CloseBraceToken = 5,
OpenParenToken = 6,
CloseParenToken = 7,
OpenBracketToken = 8,
CloseBracketToken = 9,
DotToken = 10,
SemicolonToken = 11,
CommaToken = 12,
LessThanToken = 13,
GreaterThanToken = 14,
LessThanEqualsToken = 15,
GreaterThanEqualsToken = 16,
EqualsEqualsToken = 17,
ExclamationEqualsToken = 18,
EqualsGreaterThanToken = 19,
PlusToken = 20,
MinusToken = 21,
AsteriskToken = 22,
SlashToken = 23,
PercentToken = 24,
PlusPlusToken = 25,
MinusMinusToken = 26,
LessThanLessThanToken = 27,
GreaterThanGreaterThanToken = 28,
AmpersandToken = 29,
BarToken = 30,
CaretToken = 31,
ExclamationToken = 32,
TildeToken = 33,
AmpersandAmpersandToken = 34,
BarBarToken = 35,
QuestionToken = 36,
ColonToken = 37,
AtToken = 38,
EqualsToken = 39,
PlusEqualsToken = 40,
MinusEqualsToken = 41,
AsteriskEqualsToken = 42,
SlashEqualsToken = 43,
PercentEqualsToken = 44,
LessThanLessThanEqualsToken = 45,
GreaterThanGreaterThanEqualsToken = 46,
AmpersandEqualsToken = 47,
BarEqualsToken = 48,
CaretEqualsToken = 49,
IncludeKeyword = 50,
StructKeyword = 51,
StaticKeyword = 52,
ConstKeyword = 53,
NativeKeyword = 54,
BreakKeyword = 55,
ContinueKeyword = 56,
BreakpointKeyword = 57,
ReturnKeyword = 58,
SwitchKeyword = 59,
DefaultKeyword = 60,
NewKeyword = 61,
DoKeyword = 62,
ForKeyword = 63,
WhileKeyword = 64,
IfKeyword = 65,
ElseKeyword = 66,
TrueKeyword = 67,
FalseKeyword = 68,
NullKeyword = 69,
TypedefKeyword = 70,
BoolKeyword = 71,
ByteKeyword = 72,
CharKeyword = 73,
IntKeyword = 74,
FixedKeyword = 75,
StringKeyword = 76,
AbilcmdKeyword = 77,
ActorKeyword = 78,
ActorscopeKeyword = 79,
AifilterKeyword = 80,
BankKeyword = 81,
BitmaskKeyword = 82,
CamerainfoKeyword = 83,
ColorKeyword = 84,
DatetimeKeyword = 85,
DoodadKeyword = 86,
HandleKeyword = 87,
GenerichandleKeyword = 88,
EffecthistoryKeyword = 89,
MarkerKeyword = 90,
OrderKeyword = 91,
PlayergroupKeyword = 92,
PointKeyword = 93,
RegionKeyword = 94,
RevealerKeyword = 95,
SoundKeyword = 96,
SoundlinkKeyword = 97,
TextKeyword = 98,
TimerKeyword = 99,
TransmissionsourceKeyword = 100,
TriggerKeyword = 101,
UnitKeyword = 102,
UnitfilterKeyword = 103,
UnitgroupKeyword = 104,
UnitrefKeyword = 105,
VoidKeyword = 106,
WaveKeyword = 107,
WaveinfoKeyword = 108,
WavetargetKeyword = 109,
ArrayrefKeyword = 110,
StructrefKeyword = 111,
FuncrefKeyword = 112,
Identifier = 113,
EndOfFileToken = 114,
TypeReference = 115,
MappedType = 116,
ArrayType = 117,
ArrayLiteralExpression = 118,
ElementAccessExpression = 119,
PropertyAccessExpression = 120,
CallExpression = 121,
PrefixUnaryExpression = 122,
PostfixUnaryExpression = 123,
BinaryExpression = 124,
TypeAssertionExpression = 125,
ParenthesizedExpression = 126,
SourceFile = 127,
Block = 128,
IfStatement = 129,
DoStatement = 130,
WhileStatement = 131,
ForStatement = 132,
BreakStatement = 133,
ContinueStatement = 134,
BreakpointStatement = 135,
IncludeStatement = 136,
ReturnStatement = 137,
ExpressionStatement = 138,
EmptyStatement = 139,
StructDeclaration = 140,
VariableDeclaration = 141,
FunctionDeclaration = 142,
ParameterDeclaration = 143,
PropertyDeclaration = 144,
TypedefDeclaration = 145
}
export declare const enum SyntaxKindMarker {
FirstToken = 2,
LastToken = 113,
FirstKeyword = 50,
LastKeyword = 112,
FirstBasicType = 71,
LastBasicType = 76,
FirstComplexType = 77,
LastComplexType = 109,
FirstTypeNode = 115,
LastTypeNode = 117,
FirstKeywordType = 71,
LastKeywordType = 117
}
export declare type Modifier = Token<SyntaxKind.ConstKeyword> | Token<SyntaxKind.NativeKeyword> | Token<SyntaxKind.StaticKeyword>;
export declare const enum SymbolFlags {
None = 0,
LocalVariable = 2,
FunctionParameter = 4,
GlobalVariable = 8,
Property = 16,
Function = 32,
Struct = 64,
Typedef = 128,
Static = 1024,
Native = 2048,
Variable = 14,
FunctionScopedVariable = 6
}
export interface Symbol {
id?: number;
flags: SymbolFlags;
escapedName: string;
declarations: Declaration[];
valueDeclaration?: Declaration;
members?: SymbolTable;
target?: Symbol;
parent?: Symbol;
isReferenced?: boolean;
isAssigned?: boolean;
}
export declare type SymbolTable = Map<string, Symbol>;
export declare const enum TypeFlags {
Unknown = 1,
String = 2,
Integer = 4,
Byte = 8,
Char = 16,
Fixed = 32,
Boolean = 64,
Nullable = 128,
StringLiteral = 256,
NumericLiteral = 512,
BooleanLiteral = 1024,
Void = 2048,
Null = 4096,
Struct = 8192,
Function = 16384,
Complex = 32768,
Array = 65536,
Mapped = 131072,
Reference = 262144,
Typedef = 2097152,
True = 4194304,
False = 8388608,
Literal = 1792,
IntLike = 12,
Numeric = 44
}
export interface Type {
flags: TypeFlags;
symbol?: Symbol;
}
export interface LiteralType extends Type {
value: string | number;
freshType?: LiteralType;
regularType?: LiteralType;
}
export interface StringLiteralType extends LiteralType {
value: string;
}
export interface NumberLiteralType extends LiteralType {
value: number;
}
export interface StructType extends Type {
}
export interface FunctionType extends Type {
}
export interface TypedefType extends Type {
referencedType: Type;
}
export interface ArrayType extends Type {
elementType: Type;
}
export interface MappedType extends Type {
returnType: Type;
referencedType: Type;
}
export interface ComplexType extends Type {
kind: SyntaxKind;
}
export declare const enum NodeCheckFlags {
TypeChecked = 1,
ContextChecked = 2
}
export interface NodeLinks {
flags?: NodeCheckFlags;
resolvedType?: Type;
resolvedSymbol?: Symbol;
}
export interface TextRange {
line: number;
char: number;
pos: number;
end: number;
}
export interface Token<TKind extends SyntaxKind> extends Node {
kind: TKind;
}
export interface Node extends TextRange {
id?: number;
kind: SyntaxKind;
kindName?: string;
parent?: Node;
syntaxTokens: Node[];
}
export interface NodeArray<T extends Node> extends ReadonlyArray<T>, TextRange {
}
export declare type MutableNodeArray<T extends Node> = NodeArray<T> & T[];
export interface Statement extends Node {
}
export interface ExpressionStatement extends Statement {
kind: SyntaxKind.ExpressionStatement;
expression: Expression;
}
export interface EmptyStatement extends Statement {
kind: SyntaxKind.EmptyStatement;
}
export interface Block extends Statement {
kind: SyntaxKind.Block;
statements: NodeArray<Statement>;
hasReturn?: boolean;
}
export interface IncludeStatement extends Statement {
kind: SyntaxKind.IncludeStatement;
path: StringLiteral;
}
export interface TypeNode extends Node {
symbol?: Symbol;
}
export interface ArrayTypeNode extends TypeNode {
kind: SyntaxKind.ArrayType;
elementType: TypeNode;
size: Expression;
}
export interface MappedTypeNode extends TypeNode {
kind: SyntaxKind.MappedType;
returnType: TypeNode;
typeArguments?: NodeArray<TypeNode>;
}
export interface Declaration extends Node {
modifiers?: NodeArray<Modifier>;
symbol?: Symbol;
}
export interface NamedDeclaration extends Declaration {
name: Identifier;
}
export interface ParameterDeclaration extends NamedDeclaration {
kind: SyntaxKind.ParameterDeclaration;
type: TypeNode;
}
export interface SignatureDeclaration extends Declaration {
type: TypeNode;
parameters: NodeArray<ParameterDeclaration>;
}
export interface VariableDeclaration extends NamedDeclaration {
kind: SyntaxKind.VariableDeclaration;
type: TypeNode;
initializer?: Expression;
}
export interface StructDeclaration extends NamedDeclaration {
kind: SyntaxKind.StructDeclaration;
members: NodeArray<PropertyDeclaration>;
}
export interface PropertyDeclaration extends NamedDeclaration {
kind: SyntaxKind.PropertyDeclaration;
type: TypeNode;
}
export interface FunctionDeclaration extends SignatureDeclaration, NamedDeclaration {
kind: SyntaxKind.FunctionDeclaration;
body?: Block;
}
export interface TypedefDeclaration extends NamedDeclaration {
kind: SyntaxKind.TypedefDeclaration;
type: TypeNode;
}
export interface ReturnStatement extends Statement {
kind: SyntaxKind.ReturnStatement;
expression?: Expression;
}
export interface SourceFile extends Declaration {
kind: SyntaxKind.SourceFile;
fileName: string;
statements: NodeArray<Statement>;
lineMap: number[];
commentsLineMap: Map<number, Token<SyntaxKind.SingleLineCommentTrivia>>;
text: string;
parseDiagnostics: Diagnostic[];
bindDiagnostics: Diagnostic[];
additionalSyntacticDiagnostics: Diagnostic[];
}
export interface Expression extends Node {
}
export interface ParenthesizedExpression extends PrimaryExpression {
kind: SyntaxKind.ParenthesizedExpression;
expression: Expression;
}
export interface Literal extends Expression {
value?: string;
text?: string;
}
export interface StringLiteral extends Literal {
kind: SyntaxKind.StringLiteral;
}
export interface NumericLiteral extends Literal {
kind: SyntaxKind.NumericLiteral;
}
export interface Identifier extends PrimaryExpression {
kind: SyntaxKind.Identifier;
name: string;
resolvedSymbol?: Symbol;
}
export declare type EntityNameExpression = Identifier | PropertyAccessExpression | ParenthesizedExpression;
export declare type PrefixUnaryOperator = SyntaxKind.MinusToken | SyntaxKind.PlusToken | SyntaxKind.TildeToken | SyntaxKind.ExclamationToken | SyntaxKind.MinusMinusToken | SyntaxKind.PlusPlusToken;
export declare type PostfixUnaryOperator = SyntaxKind.PlusPlusToken | SyntaxKind.MinusMinusToken;
export declare type BinaryOperator = SyntaxKind.MinusToken | SyntaxKind.PlusToken | SyntaxKind.AsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken | SyntaxKind.AmpersandToken | SyntaxKind.BarToken | SyntaxKind.CaretToken | SyntaxKind.LessThanLessThanToken | SyntaxKind.GreaterThanGreaterThanToken | SyntaxKind.BarBarToken | SyntaxKind.AmpersandAmpersandToken;
export declare type BinaryOperatorToken = Token<BinaryOperator>;
export interface UpdateExpression extends UnaryExpression {
}
export interface LeftHandSideExpression extends UpdateExpression {
}
export interface MemberExpression extends LeftHandSideExpression {
}
export interface PrimaryExpression extends MemberExpression {
}
export interface UnaryExpression extends Expression {
}
export interface BinaryExpression extends Expression {
kind: SyntaxKind.BinaryExpression;
left: Expression;
operatorToken: Token<BinaryOperator>;
right: Expression;
}
export interface PrefixUnaryExpression extends UnaryExpression {
kind: SyntaxKind.PrefixUnaryExpression;
operator: Token<PrefixUnaryOperator>;
operand: UnaryExpression;
}
export interface PostfixUnaryExpression extends UnaryExpression {
kind: SyntaxKind.PostfixUnaryExpression;
operand: LeftHandSideExpression;
operator: Token<PostfixUnaryOperator>;
}
export interface ElementAccessExpression extends MemberExpression {
kind: SyntaxKind.ElementAccessExpression;
expression: LeftHandSideExpression;
argumentExpression: Expression;
}
export interface SymbolLink {
symbolLink: Symbol;
}
export interface PropertyAccessExpression extends MemberExpression, NamedDeclaration {
kind: SyntaxKind.PropertyAccessExpression;
expression: LeftHandSideExpression;
name: Identifier;
}
export interface CallExpression extends LeftHandSideExpression, Declaration {
kind: SyntaxKind.CallExpression;
expression: LeftHandSideExpression;
arguments: NodeArray<Expression>;
}
export interface BreakStatement extends Statement {
kind: SyntaxKind.BreakStatement;
}
export interface ContinueStatement extends Statement {
kind: SyntaxKind.ContinueStatement;
}
export declare type BreakOrContinueStatement = BreakStatement | ContinueStatement;
export interface BreakpointStatement extends Statement {
kind: SyntaxKind.BreakpointStatement;
}
export interface IfStatement extends Statement {
kind: SyntaxKind.IfStatement;
expression: Expression;
thenStatement: Statement;
elseStatement?: Statement;
hasReturn?: boolean;
}
export interface IterationStatement extends Statement {
statement: Statement;
}
export interface DoStatement extends IterationStatement {
kind: SyntaxKind.DoStatement;
expression: Expression;
}
export interface WhileStatement extends IterationStatement {
kind: SyntaxKind.WhileStatement;
expression: Expression;
}
export interface ForStatement extends IterationStatement {
kind: SyntaxKind.ForStatement;
initializer?: Expression;
condition?: Expression;
incrementor?: Expression;
}
export declare enum DiagnosticCategory {
Error = 1,
Warning = 2,
Message = 3,
Hint = 4
}
export interface DiagnosticMessage {
category: DiagnosticCategory;
code: number;
message: string;
}
export interface Diagnostic {
file?: SourceFile;
start?: number;
length?: number;
messageText: string;
category: DiagnosticCategory;
tags?: lsp.DiagnosticTag[];
code: number;
source?: string;
line?: number;
col?: number;
toString(): string;
}