Skip to content

Commit 30f2fc1

Browse files
committed
Add active/open file tracking.
Fixes #29.
1 parent dc7138d commit 30f2fc1

2 files changed

Lines changed: 51 additions & 0 deletions

File tree

‎src/extension.ts‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { DartHoverProvider } from "./dart_hover_provider";
1515
import { DartIndentFixer } from "./dart_indent_fixer";
1616
import { DartWorkspaceSymbolProvider } from "./dart_workspace_symbol_provider";
1717
import { FileChangeHandler } from "./file_change_handler";
18+
import { OpenFileTracker } from "./open_file_tracker";
1819
import { ServerStatusNotification } from "./analysis_server_types";
1920

2021
const DART_MODE: vscode.DocumentFilter = { language: "dart", scheme: "file" };
@@ -80,6 +81,13 @@ export function activate(context: vscode.ExtensionContext) {
8081
context.subscriptions.push(vscode.workspace.onDidCloseTextDocument(td => fileChangeHandler.onDidCloseTextDocument(td)));
8182
vscode.workspace.textDocuments.forEach(td => fileChangeHandler.onDidOpenTextDocument(td)); // Handle already-open files.
8283

84+
// Hook open/active file changes so we can set priority files with the analyzer.
85+
let openFileTracker = new OpenFileTracker(analyzer);
86+
context.subscriptions.push(vscode.workspace.onDidOpenTextDocument(td => openFileTracker.trackFile(td)));
87+
context.subscriptions.push(vscode.workspace.onDidCloseTextDocument(td => openFileTracker.untrackFile(td)));
88+
context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(e => openFileTracker.updatePriorityFiles()));
89+
openFileTracker.trackFile(vscode.window.activeTextEditor.document); // Handle already-open files.
90+
8391
// Hook active editor change to reset Dart indenting.
8492
let dartIndentFixer = new DartIndentFixer();
8593
context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(td => dartIndentFixer.onDidChangeActiveTextEditor(td)));

‎src/open_file_tracker.ts‎

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"use strict";
2+
3+
import { window, workspace, TextDocument } from "vscode";
4+
import { Analyzer } from "./analyzer";
5+
import * as util from "./utils";
6+
7+
export class OpenFileTracker {
8+
private analyzer: Analyzer;
9+
private openDocuments: TextDocument[] = []; // Don't store filenames, can be renamed!
10+
constructor(analyzer: Analyzer) {
11+
this.analyzer = analyzer;
12+
}
13+
14+
trackFile(doc: TextDocument) {
15+
this.openDocuments.push(doc);
16+
this.updatePriorityFiles();
17+
}
18+
19+
untrackFile(doc: TextDocument) {
20+
let index = this.openDocuments.indexOf(doc);
21+
if (index >= 0) {
22+
this.openDocuments.splice(index, 1);
23+
// TODO: When a document is closed this actually fires before the visibleTextEditor
24+
// is removed, so we will still send the file until the next go. This isn't a big deal
25+
// but maybe can be improved later.
26+
this.updatePriorityFiles();
27+
}
28+
}
29+
30+
updatePriorityFiles() {
31+
let visibleDocuments = window.visibleTextEditors.map(e => e.document);
32+
let otherOpenDocuments = this.openDocuments.filter(doc => visibleDocuments.indexOf(doc) == -1);
33+
34+
let priorityDocuments = visibleDocuments.concat(otherOpenDocuments).filter(d => util.isDartLike(d));
35+
let priorityFiles = priorityDocuments.map(doc => doc.fileName);
36+
37+
console.log("Sending: " + priorityFiles.join(", "));
38+
39+
this.analyzer.analysisSetPriorityFiles({
40+
files: priorityFiles
41+
})
42+
}
43+
}

0 commit comments

Comments
 (0)