@jpoly1219/context-extractor 0.2.7 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/src/app.d.ts +7 -4
  2. package/dist/src/app.js +319 -97
  3. package/dist/src/ast.d.ts +6 -0
  4. package/dist/src/ast.js +80 -0
  5. package/dist/src/codeql.js +17 -7
  6. package/dist/src/constants.js +17 -7
  7. package/dist/src/core.d.ts +0 -1
  8. package/dist/src/core.js +17 -7
  9. package/dist/src/main.d.ts +8 -2
  10. package/dist/src/main.js +53 -13
  11. package/dist/src/ocaml-driver.d.ts +55 -5
  12. package/dist/src/ocaml-driver.js +296 -191
  13. package/dist/src/ocaml-utils/_build/default/test_parser.bc.cjs +194658 -0
  14. package/dist/src/runner.js +143 -10
  15. package/dist/src/tree-sitter-files/queries/hole-queries/typescript.scm +36 -0
  16. package/dist/src/tree-sitter-files/queries/relevant-headers-queries/typescript-get-toplevel-headers.scm +22 -0
  17. package/dist/src/tree-sitter-files/queries/relevant-types-queries/typescript-extract-identifiers.scm +10 -0
  18. package/dist/src/tree-sitter-files/queries/relevant-types-queries/typescript-find-typedecl-given-typeidentifier.scm +11 -0
  19. package/dist/src/tree-sitter-files/wasms/tree-sitter-ocaml.wasm +0 -0
  20. package/dist/src/tree-sitter-files/wasms/tree-sitter-typescript.wasm +0 -0
  21. package/dist/src/tree-sitter-files/wasms/tree-sitter.wasm +0 -0
  22. package/dist/src/tree-sitter.d.ts +40 -0
  23. package/dist/src/tree-sitter.js +311 -0
  24. package/dist/src/types.d.ts +80 -9
  25. package/dist/src/types.js +1 -6
  26. package/dist/src/typescript-driver.d.ts +86 -12
  27. package/dist/src/typescript-driver.js +1276 -205
  28. package/dist/src/typescript-type-checker.d.ts +22 -2
  29. package/dist/src/typescript-type-checker.js +290 -9
  30. package/dist/src/utils.d.ts +11 -1
  31. package/dist/src/utils.js +87 -10
  32. package/dist/src/vscode-ide.d.ts +29 -0
  33. package/dist/src/vscode-ide.js +161 -0
  34. package/package.json +12 -6
@@ -1,4 +1,10 @@
1
1
  import { LspClient, Range } from "../ts-lsp-client-dist/src/main";
2
+ import * as fs from "fs";
3
+ import { SyntaxNode, Tree } from "web-tree-sitter";
4
+ interface Position {
5
+ line: number;
6
+ character: number;
7
+ }
2
8
  interface relevantTypeObject {
3
9
  typeAliasDeclaration: string;
4
10
  typeName: string;
@@ -61,8 +67,36 @@ interface typesAndLocationsQueryResult {
61
67
  };
62
68
  }
63
69
  interface LanguageDriver {
64
- init: (lspClient: LspClient, sketchPath: string) => Promise<void>;
65
- getHoleContext: (lspClient: LspClient, sketchFilePath: string) => Promise<{
70
+ init: (lspClient: LspClient | null, sketchPath: string) => Promise<void>;
71
+ injectHole: (sketchPath: string) => void;
72
+ getHoleContext: (lspClient: LspClient | null, sketchFilePath: string, logStream: fs.WriteStream | null) => Promise<{
73
+ fullHoverResult: string;
74
+ functionName: string;
75
+ functionTypeSpan: string;
76
+ linePosition: number;
77
+ characterPosition: number;
78
+ holeTypeDefLinePos: number;
79
+ holeTypeDefCharPos: number;
80
+ range: Range;
81
+ source: string;
82
+ trueHoleFunction?: string;
83
+ }>;
84
+ getHoleContextWithCompilerAPI: (sketchFilePath: string, logStream: fs.WriteStream | null) => Promise<{
85
+ fullHoverResult: string;
86
+ functionName: string;
87
+ functionTypeSpan: string;
88
+ linePosition: number;
89
+ characterPosition: number;
90
+ holeTypeDefLinePos: number;
91
+ holeTypeDefCharPos: number;
92
+ range: Range;
93
+ source: string;
94
+ trueHoleFunction?: string;
95
+ }>;
96
+ getHoleContextWithTreesitter: (sketchFilePath: string, cursorPosition: {
97
+ line: number;
98
+ character: number;
99
+ }, logStream: fs.WriteStream | null) => Promise<{
66
100
  fullHoverResult: string;
67
101
  functionName: string;
68
102
  functionTypeSpan: string;
@@ -72,9 +106,15 @@ interface LanguageDriver {
72
106
  holeTypeDefCharPos: number;
73
107
  range: Range;
74
108
  source: string;
109
+ trueHoleFunction?: string;
75
110
  }>;
76
- extractRelevantTypes: (lspClient: LspClient, fullHoverResult: string, typeName: string, startLine: number, endLine: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, currentFile: string) => Promise<Map<string, TypeSpanAndSourceFile>>;
77
- extractRelevantHeaders: (lspClient: LspClient, sources: string[], relevantTypes: Map<string, TypeSpanAndSourceFile>, holeType: string) => Promise<Set<TypeSpanAndSourceFile>>;
111
+ extractRelevantTypes: (lspClient: LspClient | null, fullHoverResult: string, typeName: string, startLine: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, currentFile: string, foundContents: Map<string, string>, logStream: fs.WriteStream | null) => Promise<Map<string, TypeSpanAndSourceFile>>;
112
+ extractRelevantTypesWithCompilerAPI: (fullHoverResult: string, typeName: string, linePosition: number, characterPosition: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, currentFile: string, foundContents: Map<string, string>, logStream: fs.WriteStream | null) => Promise<Map<string, TypeSpanAndSourceFile>>;
113
+ extractRelevantTypesWithTreesitter: (lspClient: LspClient | null, fullHoverResult: string, typeName: string, startLine: number, foundSoFar: Map<string, TypeSpanAndSourceFileAndAst>, // identifier -> [full hover result, source]
114
+ currentFile: string, foundContents: Map<string, string>, // uri -> contents
115
+ logStream: fs.WriteStream | null) => Promise<Map<string, TypeSpanAndSourceFileAndAst>>;
116
+ extractRelevantHeaders: (lspClient: LspClient | null, sources: string[], relevantTypes: Map<string, TypeSpanAndSourceFile>, holeType: string, projectRoot: string) => Promise<Set<TypeSpanAndSourceFile>>;
117
+ extractRelevantHeadersWithTreesitter: (_: LspClient | null, sources: string[], relevantTypes: Map<string, TypeSpanAndSourceFileAndAst>, holeType: string, holeIdentifier: string, projectRoot: string) => Promise<Set<TypeSpanAndSourceFile>>;
78
118
  }
79
119
  type Filepath = string;
80
120
  type RelevantType = string;
@@ -84,10 +124,7 @@ interface Context {
84
124
  relevantTypes: Map<Filepath, RelevantType[]>;
85
125
  relevantHeaders: Map<Filepath, RelevantHeader[]>;
86
126
  }
87
- declare enum Language {
88
- TypeScript = 0,
89
- OCaml = 1
90
- }
127
+ type Language = "typescript" | "ocaml";
91
128
  interface TypeChecker {
92
129
  getTypeContextFromDecl: (typeDecl: string) => {
93
130
  identifier: string;
@@ -98,6 +135,9 @@ interface TypeSpanAndSourceFile {
98
135
  typeSpan: string;
99
136
  sourceFile: string;
100
137
  }
138
+ interface TypeSpanAndSourceFileAndAst extends TypeSpanAndSourceFile {
139
+ ast: Tree;
140
+ }
101
141
  declare enum Model {
102
142
  None = 0,
103
143
  GPT4 = "gpt4",
@@ -131,4 +171,35 @@ interface ParameterAnalysis {
131
171
  optional: boolean;
132
172
  type: TypeAnalysis;
133
173
  }
134
- export { relevantTypeObject, varsObject, typesObject, typeAndLocation, relevantTypeQueryResult, varsQueryResult, typesQueryResult, typesAndLocationsQueryResult, LanguageDriver, Language, TypeChecker, TypeSpanAndSourceFile, Context, Model, LLMConfig, GPT4Config, GPT4PromptComponent, TypeAnalysis, ParameterAnalysis };
174
+ interface VarFuncDecls {
175
+ kind: "variable" | "function" | "arrowFunction" | "classMethod";
176
+ name: string;
177
+ type: string;
178
+ returnType?: string;
179
+ position: {
180
+ line: number;
181
+ character: number;
182
+ };
183
+ declarationText: string;
184
+ sourceFile: string;
185
+ }
186
+ type IDE = "standalone" | "vscode";
187
+ type VSCodeBuiltinProvider = ExecuteHoverProvider | ExecuteDefinitionProvider | ExecuteTypeDefinitionProvider | ExecuteDocumentSymbolProvider;
188
+ type ExecuteHoverProvider = "vscode.executeHoverProvider";
189
+ type ExecuteDefinitionProvider = "vscode.executeDefinitionProvider";
190
+ type ExecuteTypeDefinitionProvider = "vscode.executeTypeDefinitionProvider";
191
+ type ExecuteDocumentSymbolProvider = "vscode.executeDocumentSymbolProvider";
192
+ interface RangeInFile {
193
+ filepath: string;
194
+ range: Range;
195
+ }
196
+ interface RangeInFileWithContents extends RangeInFile {
197
+ contents: string;
198
+ }
199
+ interface SymbolWithRange extends RangeInFile {
200
+ name: string;
201
+ type: SyntaxNode["type"];
202
+ content: string;
203
+ }
204
+ type FileSymbolMap = Record<string, SymbolWithRange[]>;
205
+ export { Position, relevantTypeObject, varsObject, typesObject, typeAndLocation, relevantTypeQueryResult, varsQueryResult, typesQueryResult, typesAndLocationsQueryResult, LanguageDriver, Language, TypeChecker, TypeSpanAndSourceFile, TypeSpanAndSourceFileAndAst, Context, Model, LLMConfig, GPT4Config, GPT4PromptComponent, TypeAnalysis, ParameterAnalysis, VarFuncDecls, IDE, VSCodeBuiltinProvider, RangeInFile, RangeInFileWithContents, SymbolWithRange, FileSymbolMap };
package/dist/src/types.js CHANGED
@@ -1,11 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Model = exports.Language = void 0;
4
- var Language;
5
- (function (Language) {
6
- Language[Language["TypeScript"] = 0] = "TypeScript";
7
- Language[Language["OCaml"] = 1] = "OCaml";
8
- })(Language || (exports.Language = Language = {}));
3
+ exports.Model = void 0;
9
4
  var Model;
10
5
  (function (Model) {
11
6
  Model[Model["None"] = 0] = "None";
@@ -1,10 +1,55 @@
1
- import { LspClient, Range } from "../ts-lsp-client-dist/src/main";
2
- import { LanguageDriver, TypeSpanAndSourceFile } from "./types";
1
+ import * as ts from 'typescript';
2
+ import * as fs from "fs";
3
+ import { LspClient, Location, Range, SymbolInformation } from "../ts-lsp-client-dist/src/main";
4
+ import { LanguageDriver, TypeSpanAndSourceFile, TypeAnalysis, IDE, TypeSpanAndSourceFileAndAst } from "./types";
3
5
  import { TypeScriptTypeChecker } from "./typescript-type-checker";
6
+ import Parser from 'web-tree-sitter';
4
7
  export declare class TypeScriptDriver implements LanguageDriver {
8
+ ide: IDE;
5
9
  typeChecker: TypeScriptTypeChecker;
6
- init(lspClient: LspClient, sketchPath: string): Promise<void>;
7
- getHoleContext(lspClient: LspClient, sketchFilePath: string): Promise<{
10
+ vscodeImport: any;
11
+ tsCompilerProgram: ts.Program;
12
+ tsCompilerTypeChecker: ts.TypeChecker;
13
+ constructor(ide: IDE, sources: string[], projectRoot: string);
14
+ init(lspClient: LspClient | null, sketchPath: string): Promise<void>;
15
+ injectHole(sketchFilePath: string): void;
16
+ getHoleContext(lspClient: LspClient | null, sketchFilePath: string, logStream: fs.WriteStream | null): Promise<{
17
+ fullHoverResult: any;
18
+ functionName: string;
19
+ functionTypeSpan: any;
20
+ linePosition: number;
21
+ characterPosition: number;
22
+ holeTypeDefLinePos: number;
23
+ holeTypeDefCharPos: number;
24
+ range: any;
25
+ source: string;
26
+ trueHoleFunction: string;
27
+ }>;
28
+ getHoleContextWithCompilerAPI(sketchFilePath: string, logStream: fs.WriteStream | null): Promise<{
29
+ fullHoverResult: string;
30
+ functionName: string;
31
+ functionTypeSpan: string;
32
+ linePosition: number;
33
+ characterPosition: number;
34
+ holeTypeDefLinePos: number;
35
+ holeTypeDefCharPos: number;
36
+ range: {
37
+ start: {
38
+ line: number;
39
+ character: number;
40
+ };
41
+ end: {
42
+ line: number;
43
+ character: number;
44
+ };
45
+ };
46
+ source: string;
47
+ trueHoleFunction: string;
48
+ }>;
49
+ getHoleContextWithTreesitter(sketchFilePath: string, cursorPosition: {
50
+ line: number;
51
+ character: number;
52
+ }, logStream: fs.WriteStream | null): Promise<{
8
53
  fullHoverResult: string;
9
54
  functionName: string;
10
55
  functionTypeSpan: string;
@@ -14,14 +59,43 @@ export declare class TypeScriptDriver implements LanguageDriver {
14
59
  holeTypeDefCharPos: number;
15
60
  range: Range;
16
61
  source: string;
62
+ trueHoleFunction?: string;
17
63
  }>;
18
- extractRelevantTypes(lspClient: LspClient, fullHoverResult: string, typeName: string, startLine: number, endLine: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, // identifier -> [full hover result, source]
19
- currentFile: string): Promise<Map<string, TypeSpanAndSourceFile>>;
20
- extractRelevantHeaders(_: LspClient, sources: string[], relevantTypes: Map<string, TypeSpanAndSourceFile>, holeType: string): Promise<Set<TypeSpanAndSourceFile>>;
21
- generateTargetTypes(relevantTypes: Map<string, TypeSpanAndSourceFile>, holeType: string): Set<string>;
22
- generateTargetTypesHelper(relevantTypes: Map<string, TypeSpanAndSourceFile>, currType: string, targetTypes: Set<string>): void;
23
- extractRelevantHeadersHelper(typeSpan: string, targetTypes: Set<string>, relevantTypes: Map<string, TypeSpanAndSourceFile>, relevantContext: Set<TypeSpanAndSourceFile>, line: string, source: string): void;
24
- isTypeEquivalent(t1: string, t2: string, relevantTypes: Map<string, TypeSpanAndSourceFile>): boolean;
64
+ extractRelevantTypes1(lspClient: LspClient, fullHoverResult: string, typeName: string, startLine: number, endLine: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, // identifier -> [full hover result, source]
65
+ currentFile: string, foundTypeDefinitions: Map<string, Location[]>, foundSymbols: Map<string, SymbolInformation[]>): Promise<Map<string, TypeSpanAndSourceFile>>;
66
+ extractRelevantTypes(lspClient: LspClient | null, fullHoverResult: string, typeName: string, startLine: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, // identifier -> [full hover result, source]
67
+ currentFile: string, foundContents: Map<string, string>, // uri -> contents
68
+ logStream: fs.WriteStream | null): Promise<Map<string, TypeSpanAndSourceFile>>;
69
+ extractRelevantTypesWithTreesitter(lspClient: LspClient | null, fullHoverResult: string, typeName: string, startLine: number, foundSoFar: Map<string, TypeSpanAndSourceFileAndAst>, // identifier -> [full hover result, source]
70
+ currentFile: string, foundContents: Map<string, string>, // uri -> contents
71
+ logStream: fs.WriteStream | null): Promise<Map<string, TypeSpanAndSourceFileAndAst>>;
72
+ extractRelevantTypesHelper(lspClient: LspClient | null, fullHoverResult: string, typeName: string, startLine: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, // identifier -> [full hover result, source]
73
+ currentFile: string, foundContents: Map<string, string>, // uri -> contents
74
+ layer: number): Promise<void>;
75
+ extractRelevantTypesWithCompilerAPI(fullHoverResult: string, typeName: string, linePosition: number, characterPosition: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, // identifier -> [full hover result, source]
76
+ currentFile: string, foundContents: Map<string, string>, // uri -> contents
77
+ logStream: fs.WriteStream | null): Promise<Map<string, TypeSpanAndSourceFile>>;
78
+ extractRelevantTypesHelperWithCompilerAPI(fullHoverResult: string, typeName: string, linePosition: number, characterPosition: number, foundSoFar: Map<string, TypeSpanAndSourceFile>, // identifier -> [full hover result, source]
79
+ currentFile: string, foundContents: Map<string, string>, // uri -> contents
80
+ layer: number): Promise<void>;
81
+ extractRelevantTypesHelperWithTreesitter(lspClient: LspClient | null, fullHoverResult: string, typeName: string, startLine: number, foundSoFar: Map<string, TypeSpanAndSourceFileAndAst>, // identifier -> [full hover result, source]
82
+ currentFile: string, foundContents: Map<string, string>, // uri -> contents
83
+ layer: number): Promise<void>;
84
+ extractRelevantHeaders(_: LspClient | null, sources: string[], relevantTypes: Map<string, TypeSpanAndSourceFile>, holeType: string, projectRoot: string): Promise<Set<TypeSpanAndSourceFile>>;
85
+ generateTargetTypes(relevantTypes: Map<string, TypeSpanAndSourceFile>, holeType: string, program: ts.Program, checker: ts.TypeChecker): Set<string>;
86
+ generateTargetTypesHelper(relevantTypes: Map<string, TypeSpanAndSourceFile>, currType: string, targetTypes: Set<string>, program: ts.Program, checker: ts.TypeChecker): void;
87
+ extractRelevantHeadersHelper(typeSpan: string, targetTypes: Set<string>, relevantTypes: Map<string, TypeSpanAndSourceFile>, relevantContext: Set<TypeSpanAndSourceFile>, line: string, source: string, relevantContextMap: Map<string, TypeSpanAndSourceFile>, tag: boolean, trace: string[], foundNormalForms: Map<string, string>, foundTypeAnalysisResults: Map<string, TypeAnalysis>, // filename+typeSpan -> typeAnalysisResult
88
+ program: ts.Program, checker: ts.TypeChecker): void;
89
+ isTypeEquivalent(t1: string, t2: string, relevantTypes: Map<string, TypeSpanAndSourceFile>, foundNormalForms: Map<string, string>, program: ts.Program, checker: ts.TypeChecker): boolean;
25
90
  normalize(typeSpan: string, relevantTypes: Map<string, TypeSpanAndSourceFile>): string;
26
- normalize2(typeSpan: string, relevantTypes: Map<string, TypeSpanAndSourceFile>): string;
91
+ normalize2(typeSpan: string, relevantTypes: Map<string, TypeSpanAndSourceFile>, program: ts.Program, checker: ts.TypeChecker): string;
92
+ extractRelevantHeadersHelper2(declText: string, typeSpan: string, targetTypes: Set<string>, relevantTypes: Map<string, TypeSpanAndSourceFile>, relevantContext: Set<TypeSpanAndSourceFile>, source: string, relevantContextMap: Map<string, TypeSpanAndSourceFile>, trace: string[], foundNormalForms: Map<string, string>, foundTypeAnalysisResults: Map<string, TypeAnalysis>, // filename+typeSpan -> typeAnalysisResult
93
+ program: ts.Program, checker: ts.TypeChecker): void;
94
+ extractRelevantHeadersWithTreesitter(_: LspClient | null, sources: string[], relevantTypes: Map<string, TypeSpanAndSourceFileAndAst>, holeType: string, holeIdentifier: string, projectRoot: string): Promise<Set<TypeSpanAndSourceFile>>;
95
+ extractRelevantHeadersWithTreesitterHelper(originalDeclText: string, node: Parser.SyntaxNode, targetTypes: Set<Parser.SyntaxNode>, relevantTypes: Map<string, TypeSpanAndSourceFileAndAst>, relevantContext: Set<TypeSpanAndSourceFile>, relevantContextMap: Map<string, TypeSpanAndSourceFile>, foundNormalForms: Map<string, string>, source: string): Promise<void>;
96
+ generateTargetTypesWithTreesitter(relevantTypes: Map<string, TypeSpanAndSourceFileAndAst>, holeType: string, holeIdentifier: string): Promise<Set<Parser.SyntaxNode>>;
97
+ unwrapToBaseType(node: Parser.SyntaxNode): Parser.SyntaxNode;
98
+ generateTargetTypesWithTreesitterHelper(relevantTypes: Map<string, TypeSpanAndSourceFileAndAst>, currType: string, targetTypes: Set<Parser.SyntaxNode>, node: Parser.SyntaxNode | null): Promise<void>;
99
+ isTypeEquivalentWithTreesitter(node: Parser.SyntaxNode, typ: Parser.SyntaxNode, relevantTypes: Map<string, TypeSpanAndSourceFileAndAst>, foundNormalForms: Map<string, string>): Promise<boolean>;
100
+ normalizeWithTreesitter(node: Parser.SyntaxNode, relevantTypes: Map<string, TypeSpanAndSourceFileAndAst>): Promise<string>;
27
101
  }