Skip to content

Commit 444ddce

Browse files
authored
Merge pull request #6 from jpoly1219/jacob/enhancement/fasterExtraction
Jacob/enhancement/faster extraction
2 parents 3dd3635 + 6b77527 commit 444ddce

File tree

7 files changed

+253
-44
lines changed

7 files changed

+253
-44
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@jpoly1219/context-extractor",
3-
"version": "0.2.7",
3+
"version": "0.2.8",
44
"description": "Extract relevant context from an incomplete program sketch.",
55
"repository": {
66
"type": "git",

src/app.ts

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -107,32 +107,30 @@ export class App {
107107

108108
await this.init();
109109

110-
console.time("getHoleContext");
110+
// console.time("getHoleContext");
111111
const holeContext = await this.languageDriver.getHoleContext(
112112
this.lspClient,
113113
this.sketchPath,
114114
);
115-
console.timeEnd("getHoleContext");
115+
// console.timeEnd("getHoleContext");
116116

117-
console.time("extractRelevantTypes");
117+
// console.time("extractRelevantTypes");
118118
const relevantTypes = await this.languageDriver.extractRelevantTypes(
119119
this.lspClient,
120-
holeContext.fullHoverResult,
120+
// NOTE: sometimes fullHoverResult isn't representative of the actual file contents, especially with generic functions.
121+
holeContext.trueHoleFunction ? holeContext.trueHoleFunction : holeContext.fullHoverResult,
121122
holeContext.functionName,
122123
holeContext.range.start.line,
123-
holeContext.range.end.line,
124124
new Map<string, TypeSpanAndSourceFile>(),
125125
holeContext.source,
126-
new Map<string, Location[]>(),
127-
new Map<string, SymbolInformation[]>()
128-
// new Map<string, Map<number, Range>>(),
126+
new Map<string, string>()
129127
);
130-
console.timeEnd("extractRelevantTypes");
128+
// console.timeEnd("extractRelevantTypes");
131129

132130
// console.dir(relevantTypes, { depth: null })
133131

134132
// Postprocess the map.
135-
console.time("extractRelevantTypes postprocess");
133+
// console.time("extractRelevantTypes postprocess");
136134
if (this.language === Language.TypeScript) {
137135
relevantTypes.delete("_()");
138136
for (const [k, { typeSpan: v, sourceFile: src }] of relevantTypes.entries()) {
@@ -141,32 +139,33 @@ export class App {
141139
} else if (this.language === Language.OCaml) {
142140
relevantTypes.delete("_");
143141
}
144-
console.timeEnd("extractRelevantTypes postprocess");
142+
// console.timeEnd("extractRelevantTypes postprocess");
145143

146144

147-
console.time("extractRelevantHeaders repo");
145+
// console.time("extractRelevantHeaders repo");
148146
let repo: string[] = [];
149147
if (this.language === Language.TypeScript) {
150148
repo = getAllTSFiles(this.repoPath);
151149
} else if (this.language === Language.OCaml) {
152150
repo = getAllOCamlFiles(this.repoPath);
153151
}
154-
console.timeEnd("extractRelevantHeaders repo");
152+
// console.timeEnd("extractRelevantHeaders repo");
155153

156-
console.time("extractRelevantHeaders");
154+
// console.time("extractRelevantHeaders");
157155
const relevantHeaders = await this.languageDriver.extractRelevantHeaders(
158156
this.lspClient,
159157
repo,
160158
relevantTypes,
161159
holeContext.functionTypeSpan
162160
);
163-
console.timeEnd("extractRelevantHeaders");
161+
// const relevantHeaders: { typeSpan: string, sourceFile: string }[] = []
162+
// console.timeEnd("extractRelevantHeaders");
164163

165164
// console.log(relevantHeaders)
166165
// console.log(relevantHeaders.size)
167166

168167
// Postprocess the map.
169-
console.time("extractRelevantHeaders postprocess");
168+
// console.time("extractRelevantHaders postprocess");
170169
if (this.language === Language.TypeScript) {
171170
relevantTypes.delete("");
172171
for (const [k, { typeSpan: v, sourceFile: src }] of relevantTypes.entries()) {
@@ -176,9 +175,9 @@ export class App {
176175
obj.typeSpan += ";";
177176
}
178177
}
179-
console.timeEnd("extractRelevantHeaders postprocess");
178+
// console.timeEnd("extractRelevantHeaders postprocess");
180179

181-
console.time("toReturn");
180+
// console.time("toReturn");
182181
const relevantTypesToReturn: Map<string, string[]> = new Map<string, string[]>();
183182
relevantTypes.forEach(({ typeSpan: v, sourceFile: src }, _) => {
184183
if (relevantTypesToReturn.has(src)) {
@@ -203,7 +202,7 @@ export class App {
203202
relevantHeadersToReturn.set(src, [v]);
204203
}
205204
})
206-
console.timeEnd("toReturn");
205+
// console.timeEnd("toReturn");
207206

208207
this.result = {
209208
holeType: holeContext.functionTypeSpan,

src/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,12 +238,12 @@ export const extractContext = async (
238238
sketchPath: string,
239239
repoPath: string,
240240
) => {
241-
console.time("extractContext")
241+
// console.time("extractContext")
242242
const app = new App(language, sketchPath, repoPath);
243243
await app.run();
244244
const res = app.getSavedResult();
245245
app.close();
246-
console.timeEnd("extractContext")
246+
// console.timeEnd("extractContext")
247247
return res;
248248

249249
// if (!getCompletion) {

src/ocaml-driver.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,18 +169,16 @@ export class OcamlDriver implements LanguageDriver {
169169
fullHoverResult: string,
170170
typeName: string,
171171
startLine: number,
172-
endLine: number,
173172
foundSoFar: Map<string, TypeSpanAndSourceFile>,
174173
currentFile: string,
175-
// outputFile: fs.WriteStream,
176174
) {
177175
if (!foundSoFar.has(typeName)) {
178176
foundSoFar.set(typeName, { typeSpan: fullHoverResult, sourceFile: currentFile.slice(7) });
179177
// outputFile.write(`${fullHoverResult};\n`);
180178

181179
const content = fs.readFileSync(currentFile.slice(7), "utf8");
182180

183-
for (let linePos = startLine; linePos <= endLine; ++linePos) {
181+
for (let linePos = startLine; linePos <= fullHoverResult.length; ++linePos) {
184182
const numOfCharsInLine = parseInt(execSync(`wc -m <<< "${content.split("\n")[linePos]}"`, { shell: "/bin/bash" }).toString());
185183

186184
for (let charPos = 0; charPos < numOfCharsInLine; ++charPos) {
@@ -236,10 +234,8 @@ export class OcamlDriver implements LanguageDriver {
236234
snippetInRange,
237235
identifier,
238236
matchingSymbolRange.start.line,
239-
matchingSymbolRange.end.line,
240237
foundSoFar,
241238
(typeDefinitionResult[0] as Location).uri,
242-
// outputFile,
243239
);
244240

245241
}

src/types.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,16 @@ interface LanguageDriver {
7373
holeTypeDefCharPos: number;
7474
range: Range;
7575
source: string;
76+
trueHoleFunction?: string;
7677
}>;
7778
extractRelevantTypes: (
7879
lspClient: LspClient,
7980
fullHoverResult: string,
8081
typeName: string,
8182
startLine: number,
82-
endLine: number,
8383
foundSoFar: Map<string, TypeSpanAndSourceFile>,
8484
currentFile: string,
85-
foundTypeDefinitions: Map<string, Location[]>,
86-
foundSymbols: Map<string, SymbolInformation[]>,
87-
// foundSymbols: Map<string, Map<number, Range>>,
88-
// outputFile: fs.WriteStream,
85+
foundContents: Map<string, string>,
8986
) => Promise<Map<string, TypeSpanAndSourceFile>>;
9087
extractRelevantHeaders: (
9188
lspClient: LspClient,

0 commit comments

Comments
 (0)