diff --git a/extensions/void/src/Diff.ts b/extensions/void/src/Diff.ts new file mode 100644 index 00000000..b26d380c --- /dev/null +++ b/extensions/void/src/Diff.ts @@ -0,0 +1,8 @@ + +class Diff { + + constructor(){ + + } + +} \ No newline at end of file diff --git a/extensions/void/src/DisplayChangesProvider.ts b/extensions/void/src/DisplayChangesProvider.ts index 4cfb92e3..d8a7c7d3 100644 --- a/extensions/void/src/DisplayChangesProvider.ts +++ b/extensions/void/src/DisplayChangesProvider.ts @@ -12,7 +12,7 @@ const greenDecoration = vscode.window.createTextEditorDecorationType({ // responsible for displaying diffs and showing accept/reject buttons -export class DisplayChangesProvider implements vscode.CodeLensProvider { +export class DisplayChangesProvider { private _diffAreasOfDocument: { [docUriStr: string]: DiffArea[] } = {} private _diffsOfDocument: { [docUriStr: string]: Diff[] } = {} @@ -21,22 +21,23 @@ export class DisplayChangesProvider implements vscode.CodeLensProvider { private _diffidPool = 0 private _weAreEditing: boolean = false - // used internally by vscode - private _onDidChangeCodeLenses: vscode.EventEmitter = new vscode.EventEmitter(); // signals a UI refresh on .fire() events - public readonly onDidChangeCodeLenses: vscode.Event = this._onDidChangeCodeLenses.event; - - // used internally by vscode - public provideCodeLenses(document: vscode.TextDocument, token: vscode.CancellationToken): vscode.ProviderResult { - const docUriStr = document.uri.toString() - return this._diffsOfDocument[docUriStr]?.flatMap(diff => diff.lenses) ?? [] - } + private _onDidChangeDiffsEvent: vscode.EventEmitter = new vscode.EventEmitter(); // signals a UI refresh on .fire() events // declared by us, registered with vscode.languages.registerCodeLensProvider() constructor() { - console.log('Creating DisplayChangesProvider') - // this acts as a useEffect. Every time text changes, clear the diffs in this editor + // update diffs whenever the event fires + this._onDidChangeDiffsEvent.event(() => { + const editor = vscode.window.activeTextEditor + if (!editor) return + + let document = editor.document + const docUriStr = document.uri.toString() + return this._diffsOfDocument[docUriStr]?.flatMap(diff => diff.lenses) ?? [] + }) + + // this acts as a useEffect. Every time text changes, run this vscode.workspace.onDidChangeTextDocument((e) => { const editor = vscode.window.activeTextEditor @@ -181,7 +182,7 @@ export class DisplayChangesProvider implements vscode.CodeLensProvider { // this._diffsOfDocument[docUriStr].map(diff => diff.deletedCode) // update code lenses - this._onDidChangeCodeLenses.fire() + this._onDidChangeDiffsEvent.fire() } diff --git a/extensions/void/src/extension.ts b/extensions/void/src/extension.ts index bebc3bf0..7c293060 100644 --- a/extensions/void/src/extension.ts +++ b/extensions/void/src/extension.ts @@ -46,15 +46,6 @@ export function activate(context: vscode.ExtensionContext) { const editor = vscode.window.activeTextEditor if (!editor) return - - // const inset = vscode.window.createWebviewTextEditorInset(editor, 10, 10, {}) - // inset.webview.html = ` - // - // Hello World! - // - // `; - - // show the sidebar vscode.commands.executeCommand('workbench.view.extension.voidViewContainer'); // vscode.commands.executeCommand('vscode.moveViewToPanel', CustomViewProvider.viewId); // move to aux bar @@ -94,9 +85,8 @@ export function activate(context: vscode.ExtensionContext) { }) ); - // 3. Show an approve/reject codelens above each change + // 3. Show an approve/reject const displayChangesProvider = new DisplayChangesProvider(); - context.subscriptions.push(vscode.languages.registerCodeLensProvider('*', displayChangesProvider)); // 4. Add approve/reject commands context.subscriptions.push(vscode.commands.registerCommand('void.acceptDiff', async (params) => {