UNPKG

plaxtony

Version:

Static code analysis of SC2 Galaxy Script

615 lines (614 loc) 16.1 kB
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; }