summaryrefslogtreecommitdiff
path: root/server/src/types.ts
blob: 01ac28aa715a1f356a7e22ad7e492621ab0fec01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Settings for perlnavigator,
// defaults for configurable editors stored in package.json
// defaults for non-configurable editors in server.ts

import { Diagnostic } from "vscode-languageserver/node";

export interface NavigatorSettings {
    perlPath: string;
    perlParams: string[];
    enableWarnings: boolean;
    perlcriticProfile: string;
    perlcriticEnabled: boolean;
    perlcriticSeverity: undefined | number;
    perlcriticTheme: undefined | string;
    perlcriticExclude: undefined | string;
    perlcriticInclude: undefined | string;
    perlimportsLintEnabled: boolean;
    perlimportsTidyEnabled: boolean;
    perlimportsProfile: string;
    perltidyEnabled: boolean;
    perltidyProfile: string;
    perlCompileEnabled: boolean;
    perlEnv: undefined | { [key: string]: string };
    perlEnvAdd: boolean;
    severity5: string;
    severity4: string;
    severity3: string;
    severity2: string;
    severity1: string;
    includePaths: string[];
    includeLib: boolean;
    logging: boolean;
    enableProgress: boolean;
}

export interface PerlElem {
    name: string;
    type: PerlSymbolKind;
    typeDetail: string;
    signature?: string[];
    uri: string;
    package: string;
    line: number;
    lineEnd: number;
    value: string;
    source: ElemSource;
}

// Used for keeping track of what has been imported
export interface PerlImport {
    mod: string;
}

export interface PerlDocument {
    elems: Map<string, PerlElem[]>;
    canonicalElems: Map<string, PerlElem>;
    autoloads: Map<string, PerlElem>;
    imported: Map<string, number>;
    parents: Map<string, string>;
    uri: string;
}

export enum ElemSource {
    symbolTable,
    modHunter,
    parser,
    packageInference,
}

export enum ParseType {
    outline,
    selfNavigation,
    refinement,
}

export interface CompilationResults {
    diags: Diagnostic[];
    perlDoc: PerlDocument;
}

export interface CompletionPrefix {
    symbol: string;
    charStart: number;
    charEnd: number;
    stripPackage: boolean;
}

// Ensure TagKind and PerlSymbolKind have no overlap
export enum TagKind {
    Canonical2    = '2',
    UseStatement  = 'u', // Reserved: used in pltags, but removed before symbol assignment.
}

export interface completionElem { 
    perlElem: PerlElem;
    docUri: string
}

export enum PerlSymbolKind {
    Module         = 'm',
    Package        = 'p',
    Class          = 'a',
    Role           = 'b',
    ImportedSub    = 't',
    Inherited      = 'i',
    Field          = 'f', // Instance fields
    PathedField    = 'd', // Instance fields
    LocalSub       = 's', 
    LocalMethod    = 'o', // Assumed to be instance methods
    Method         = 'x', // Assumed to be instance methods
    LocalVar       = 'v',
    Constant       = 'n',
    Label          = 'l',
    Phaser         = 'e',
    Canonical      = '1', // 2 and 3 are also reserved
    ImportedVar    = 'c',
    ImportedHash   = 'h',
    HttpRoute      = 'g',
    OutlineOnlySub = 'j',
    AutoLoadVar    = '3',
}