minor changes

This commit is contained in:
Andrew 2024-11-03 18:06:40 -08:00
parent a5090b8025
commit 49072d43ea
3 changed files with 77 additions and 139 deletions

View file

@ -102,8 +102,9 @@ export class DiffProvider implements vscode.CodeLensProvider {
const diffAreas = this._diffAreasOfDocument[docUriStr] || [] const diffAreas = this._diffAreasOfDocument[docUriStr] || []
let endLine let endLine: 'originalEndLine' | 'endLine'
let startLine let startLine: 'originalStartLine' | 'startLine'
if (changesTo === 'originalFile') { if (changesTo === 'originalFile') {
endLine = 'originalEndLine' as const endLine = 'originalEndLine' as const
startLine = 'originalStartLine' as const startLine = 'originalStartLine' as const
@ -291,11 +292,6 @@ export class DiffProvider implements vscode.CodeLensProvider {
const currentArea = currentLines.slice(diffArea.startLine, diffArea.endLine + 1).join('\n') const currentArea = currentLines.slice(diffArea.startLine, diffArea.endLine + 1).join('\n')
const originalArea = newOriginalLines.slice(diffArea.originalStartLine, diffArea.originalEndLine + 1).join('\n') const originalArea = newOriginalLines.slice(diffArea.originalStartLine, diffArea.originalEndLine + 1).join('\n')
console.log('ACCEPT change', changedLines.join('\n'), diff.originalRange.start.line, diff.originalRange.end.line)
console.log('ACCEPT area lines', diffArea.startLine, diffArea.endLine, diffArea.originalStartLine, diffArea.originalEndLine)
console.log('ACCEPT currentArea', currentArea)
console.log('ACCEPT originalArea', originalArea)
if (originalArea === currentArea) { if (originalArea === currentArea) {
const index = this._diffAreasOfDocument[docUriStr].findIndex(da => da.diffareaid === diffArea.diffareaid) const index = this._diffAreasOfDocument[docUriStr].findIndex(da => da.diffareaid === diffArea.diffareaid)
this._diffAreasOfDocument[docUriStr].splice(index, 1) this._diffAreasOfDocument[docUriStr].splice(index, 1)
@ -336,11 +332,6 @@ export class DiffProvider implements vscode.CodeLensProvider {
const currentArea = currentLines.slice(diffArea.startLine, diffArea.endLine + 1).join('\n') const currentArea = currentLines.slice(diffArea.startLine, diffArea.endLine + 1).join('\n')
const originalArea = originalLines.slice(diffArea.originalStartLine, diffArea.originalEndLine + 1).join('\n') const originalArea = originalLines.slice(diffArea.originalStartLine, diffArea.originalEndLine + 1).join('\n')
console.log('REJECT diff lines', diff.originalRange.start.line, diff.originalRange.end.line)
console.log('REJECT area lines', diffArea.startLine, diffArea.endLine, diffArea.originalStartLine, diffArea.originalEndLine)
console.log('REJECT currentArea', currentArea)
console.log('REJECT originalArea', originalArea)
if (originalArea === currentArea) { if (originalArea === currentArea) {
const index = this._diffAreasOfDocument[docUriStr].findIndex(da => da.diffareaid === diffArea.diffareaid) const index = this._diffAreasOfDocument[docUriStr].findIndex(da => da.diffareaid === diffArea.diffareaid)
this._diffAreasOfDocument[docUriStr].splice(index, 1) this._diffAreasOfDocument[docUriStr].splice(index, 1)
@ -349,8 +340,6 @@ export class DiffProvider implements vscode.CodeLensProvider {
this.refreshStylesAndDiffs(docUriStr) this.refreshStylesAndDiffs(docUriStr)
} }
async startStreamingInDiffArea({ docUri, oldFileStr, diffRepr, diffArea, voidConfig, abortRef }: { docUri: vscode.Uri, oldFileStr: string, diffRepr: string, voidConfig: VoidConfig, diffArea: DiffArea, abortRef: AbortRef }) { async startStreamingInDiffArea({ docUri, oldFileStr, diffRepr, diffArea, voidConfig, abortRef }: { docUri: vscode.Uri, oldFileStr: string, diffRepr: string, voidConfig: VoidConfig, diffArea: DiffArea, abortRef: AbortRef }) {
@ -369,9 +358,6 @@ INSTRUCTIONS
Please finish writing the new file by applying the diff to the original file. Return ONLY the completion of the file, without any explanation. Please finish writing the new file by applying the diff to the original file. Return ONLY the completion of the file, without any explanation.
` `
// ask LLM to rewrite file with diff (if there is significant matchup with the original file, we stop rewriting)
const START = new Date().getTime()
// make LLM complete the file to include the diff // make LLM complete the file to include the diff
await new Promise<void>((resolve, reject) => { await new Promise<void>((resolve, reject) => {
sendLLMMessage({ sendLLMMessage({
@ -397,9 +383,6 @@ Please finish writing the new file by applying the diff to the original file. Re
}) })
}) })
const END = new Date().getTime()
console.log('EDIT CHUNK time: ', END - START);
} }
@ -465,121 +448,3 @@ Please finish writing the new file by applying the diff to the original file. Re
/*
import * as vscode from 'vscode';
import { SuggestedEdit } from './findDiffs';
const greenDecoration = vscode.window.createTextEditorDecorationType({
backgroundColor: 'rgba(0 255 51 / 0.2)',
isWholeLine: false, // after: { contentText: ' [original]', color: 'rgba(0 255 60 / 0.5)' } // hoverMessage: originalText // this applies to hovering over after:...
})
export class DiffProvider {
originalCodeOfDocument: { [docUri: string]: string }
diffsOfDocument: {
[docUri: string]: {
startLine,
startCol,
endLine,
endCol,
originalText,
inset,
diffid,
}
}
// sweep
currentLine: { [docUri: string]: undefined | number }
weAreEditing: boolean = false
constructor() {
vscode.workspace.onDidChangeTextDocument((e) => {
// on user change, grow/shrink/merge/delete diff AREAS
// you dont have to do anything to the diffs here bc they all get recomputed in refresh()
// user changes only get highlighted if theyre in a diffarea
// go thru all diff areas and adjust line numbers based on the user's change
this.refreshStyles(e.document.uri.toString())
})
}
// refreshes styles on page
refreshStyles(docUriStr: string) {
if (this.weAreEditing) return
// recompute all diffs on the page
// run inset.dispose() on all diffs
// original and current code -> diffs
// originalCodeOfDocument[docUriStr]
// create new diffs
const inset = vscode.window.createWebviewTextEditorInset(editor, lineStart, height, {})
inset.webview.html = `
<html>
<body style="pointer-events:none;">Hello World!</body>
</html>
`;
}
// called on void.acceptDiff
public async acceptDiff({ diffid }: { diffid: number }) {
// update original based on the diff
// refresh()
}
// called on void.rejectDiff
public async rejectDiff({ diffid }: { diffid: number }) {
// get diffs[diffid]
// revert current file based on diff
// refresh()
}
// sweep
initializeSweep({ startLine }) {
// reject all diffs on the page
// store original code
// currentLine=start of sweep
}
onUpdateSweep(addedText) {
// update final
// refresh() ?
// currentLine += number of newlines in addedText
}
onAbortSweep() {
}
}
*/

View file

@ -3,6 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { Event } from '../../../base/common/event.js'; import { Event } from '../../../base/common/event.js';
import { ICodeEditor, IDiffEditor } from '../editorBrowser.js'; import { ICodeEditor, IDiffEditor } from '../editorBrowser.js';
import { IDecorationRenderOptions } from '../../common/editorCommon.js'; import { IDecorationRenderOptions } from '../../common/editorCommon.js';

View file

@ -8,6 +8,8 @@ import { IInlineDiffService } from '../../../editor/browser/services/inlineDiffS
import { ICodeEditor } from '../../../editor/browser/editorBrowser.js'; import { ICodeEditor } from '../../../editor/browser/editorBrowser.js';
import { IRange } from '../../../editor/common/core/range.js'; import { IRange } from '../../../editor/common/core/range.js';
import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js'; import { extHostNamedCustomer, IExtHostContext } from '../../services/extensions/common/extHostCustomers.js';
import { IUndoRedoElement, IUndoRedoService, UndoRedoElementType, UndoRedoGroup } from '../../../platform/undoRedo/common/undoRedo.js';
import { URI } from '../../../base/common/uri.js';
// import { IHistoryService } from '../../services/history/common/history.js'; // import { IHistoryService } from '../../services/history/common/history.js';
@ -22,12 +24,82 @@ export class MainThreadInlineDiff extends Disposable implements MainThreadInline
context: IExtHostContext, context: IExtHostContext,
@IInlineDiffService private readonly _inlineDiff: IInlineDiffService, @IInlineDiffService private readonly _inlineDiff: IInlineDiffService,
@ICodeEditorService private readonly _editorService: ICodeEditorService, @ICodeEditorService private readonly _editorService: ICodeEditorService,
// @IHistoryService private readonly _historyService: IHistoryService, // @IHistoryService private readonly _historyService: IHistoryService, // history service is the history of pressing alt left/right
@IUndoRedoService private readonly _undoRedoService: IUndoRedoService, // undoRedo service is the history of pressing ctrl+z
) { ) {
super(); super();
// this._proxy = context.getProxy(ExtHostContext.ExtHostEditorInsets); // this._proxy = context.getProxy(ExtHostContext.ExtHostEditorInsets);
// this._wcHistoryService.addEntry() // this._wcHistoryService.addEntry()
}
_streamingState: 'streaming' | 'idle' = 'idle'
startStreaming(editor: ICodeEditor) {
this._streamingState = 'streaming'
// count all changes towards the group
// const versionId = editor.getModel()?.getVersionId()
this._register(editor.onDidChangeModelContent((e) => {
// user presses undo (and there is something to undo)
if (e.isUndoing) {
// cancel the stream, then undo normally
return
}
// user presses redo (and there is something to redo)
if (e.isRedoing) {
// cancel the stream, then redo normally
return
}
// for good measure
if (e.isEolChange) {
// cancel stream and apply change normally
return
}
// ignore any other kind of change (make it not happen)
if (this._streamingState === 'streaming') {
// completely ignore the change
return
}
}));
// streamChange(){
// }
// all changes made when streaming should be a part of the group so we can undo them all together
const group = new UndoRedoGroup()
const elt: IUndoRedoElement = {
type: UndoRedoElementType.Resource,
resource: URI.parse('file:///path/to/file.txt'),
label: 'Add Diffs',
code: 'undoredo.inlineDiff',
undo: () => {
// reapply diffareas and diffs here
},
redo: () => {
// reapply diffareas and diffs here
}
}
this._undoRedoService.pushElement(elt, group)
} }