Include start line in code selection context
- Added start line parameter to handleCodeSelected function. - Updated all calls to handleCodeSelected to include the start line. - The start line is now included in the context data for symbol references and definitions.
This commit is contained in:
parent
f389a7bbb5
commit
7fe536f9d8
@ -3,7 +3,7 @@ import * as path from 'path';
|
|||||||
import { createTempSubdirectory, getLanguageIdByFileName } from '../util/commonUtil';
|
import { createTempSubdirectory, getLanguageIdByFileName } from '../util/commonUtil';
|
||||||
import { UiUtilWrapper } from '../util/uiUtil';
|
import { UiUtilWrapper } from '../util/uiUtil';
|
||||||
|
|
||||||
export async function handleCodeSelected(fileSelected: string, codeSelected: string) {
|
export async function handleCodeSelected(fileSelected: string, codeSelected: string, startLine: number) {
|
||||||
// get file name from fileSelected
|
// get file name from fileSelected
|
||||||
const fileName = path.basename(fileSelected);
|
const fileName = path.basename(fileSelected);
|
||||||
|
|
||||||
@ -22,6 +22,7 @@ export async function handleCodeSelected(fileSelected: string, codeSelected: str
|
|||||||
const data = {
|
const data = {
|
||||||
languageId: languageId,
|
languageId: languageId,
|
||||||
path: relativePath,
|
path: relativePath,
|
||||||
|
startLine: startLine,
|
||||||
content: codeSelected
|
content: codeSelected
|
||||||
};
|
};
|
||||||
const jsonData = JSON.stringify(data);
|
const jsonData = JSON.stringify(data);
|
||||||
|
@ -53,7 +53,7 @@ async function getSelectedSymbol(): Promise<vscode.DocumentSymbol | undefined> {
|
|||||||
|
|
||||||
export const defRefsContext: ChatContext = {
|
export const defRefsContext: ChatContext = {
|
||||||
name: 'symbol references',
|
name: 'symbol references',
|
||||||
description: 'The context where the selected symbol is referenced',
|
description: 'References of symble',
|
||||||
handler: async () => {
|
handler: async () => {
|
||||||
const activeEditor = vscode.window.activeTextEditor;
|
const activeEditor = vscode.window.activeTextEditor;
|
||||||
if (!activeEditor) {
|
if (!activeEditor) {
|
||||||
@ -91,8 +91,9 @@ export const defRefsContext: ChatContext = {
|
|||||||
const refLocationFile = refLocation.uri.fsPath;
|
const refLocationFile = refLocation.uri.fsPath;
|
||||||
const documentNew = await vscode.workspace.openTextDocument(refLocationFile);
|
const documentNew = await vscode.workspace.openTextDocument(refLocationFile);
|
||||||
|
|
||||||
const renageNew = new vscode.Range(refLocation.range.start.line - 2, 0, refLocation.range.end.line + 2, 10000);
|
const startLine = refLocation.range.start.line - 2 > 0 ? refLocation.range.start.line - 2 : 0;
|
||||||
contextList.push(await handleCodeSelected(refLocationFile, documentNew.getText(renageNew)));
|
const renageNew = new vscode.Range(startLine, 0, refLocation.range.end.line + 2, 10000);
|
||||||
|
contextList.push(await handleCodeSelected(refLocationFile, documentNew.getText(renageNew), startLine));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return contextList;
|
return contextList;
|
||||||
|
@ -63,7 +63,7 @@ async function getSymbolDefine(symbolList: string[]): Promise<string[]> {
|
|||||||
const selection = activeEditor!.selection;
|
const selection = activeEditor!.selection;
|
||||||
const selectedText = document.getText(selection);
|
const selectedText = document.getText(selection);
|
||||||
|
|
||||||
let contextList: string[] = [await handleCodeSelected(activeEditor!.document.uri.fsPath, selectedText)];
|
let contextList: string[] = [await handleCodeSelected(activeEditor!.document.uri.fsPath, selectedText, selection.start.line)];
|
||||||
let hasVisitedSymbols: Set<string> = new Set();
|
let hasVisitedSymbols: Set<string> = new Set();
|
||||||
|
|
||||||
// visit each symbol in symbolList, and get it's define
|
// visit each symbol in symbolList, and get it's define
|
||||||
@ -138,9 +138,9 @@ async function getSymbolDefine(symbolList: string[]): Promise<string[]> {
|
|||||||
|
|
||||||
if (targetSymbol.kind === vscode.SymbolKind.Variable) {
|
if (targetSymbol.kind === vscode.SymbolKind.Variable) {
|
||||||
const renageNew = new vscode.Range(targetSymbol.range.start.line, 0, targetSymbol.range.end.line, 10000);
|
const renageNew = new vscode.Range(targetSymbol.range.start.line, 0, targetSymbol.range.end.line, 10000);
|
||||||
contextList.push(await handleCodeSelected(refLocation.uri.fsPath, documentNew.getText(renageNew)));
|
contextList.push(await handleCodeSelected(refLocation.uri.fsPath, documentNew.getText(renageNew), targetSymbol.range.start.line));
|
||||||
} else {
|
} else {
|
||||||
contextList.push(await handleCodeSelected(refLocation.uri.fsPath, documentNew.getText(targetSymbol.range)));
|
contextList.push(await handleCodeSelected(refLocation.uri.fsPath, documentNew.getText(targetSymbol.range), targetSymbol.range.start.line));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,7 +153,7 @@ async function getSymbolDefine(symbolList: string[]): Promise<string[]> {
|
|||||||
|
|
||||||
export const refDefsContext: ChatContext = {
|
export const refDefsContext: ChatContext = {
|
||||||
name: 'symbol definitions',
|
name: 'symbol definitions',
|
||||||
description: 'Context of symbol definition in selected text',
|
description: 'Definitions of symbol',
|
||||||
handler: async () => {
|
handler: async () => {
|
||||||
const selectedText = await getCurrentSelectText();
|
const selectedText = await getCurrentSelectText();
|
||||||
const symbolList = await getUndefinedSymbols(selectedText);
|
const symbolList = await getUndefinedSymbols(selectedText);
|
||||||
|
@ -42,7 +42,7 @@ function registerAskForCodeCommand(context: vscode.ExtensionContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const selectedText = editor.document.getText(editor.selection);
|
const selectedText = editor.document.getText(editor.selection);
|
||||||
await sendCodeSelectMessage(ExtensionContextHolder.provider?.view()!, editor.document.fileName, selectedText);
|
await sendCodeSelectMessage(ExtensionContextHolder.provider?.view()!, editor.document.fileName, selectedText, editor.selection.start.line);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
context.subscriptions.push(vscode.commands.registerCommand('devchat.askForCode', callback));
|
context.subscriptions.push(vscode.commands.registerCommand('devchat.askForCode', callback));
|
||||||
|
@ -14,8 +14,8 @@ export async function sendFileSelectMessage(panel: vscode.WebviewPanel|vscode.We
|
|||||||
}
|
}
|
||||||
|
|
||||||
regOutMessage({command: 'appendContext', context: ''});
|
regOutMessage({command: 'appendContext', context: ''});
|
||||||
export async function sendCodeSelectMessage(panel: vscode.WebviewPanel|vscode.WebviewView, filePath: string, codeBlock: string): Promise<void> {
|
export async function sendCodeSelectMessage(panel: vscode.WebviewPanel|vscode.WebviewView, filePath: string, codeBlock: string, startLine: number): Promise<void> {
|
||||||
logger.channel()?.info(`File selected: ${filePath}`);
|
logger.channel()?.info(`File selected: ${filePath}`);
|
||||||
const codeContext = await handleCodeSelected(filePath, codeBlock);
|
const codeContext = await handleCodeSelected(filePath, codeBlock, startLine);
|
||||||
MessageHandler.sendMessage(panel, { command: 'appendContext', context: codeContext });
|
MessageHandler.sendMessage(panel, { command: 'appendContext', context: codeContext });
|
||||||
}
|
}
|
@ -28,7 +28,7 @@ describe('handleCodeSelected', () => {
|
|||||||
const fileSelected = path.join(__dirname, 'testFile.ts');
|
const fileSelected = path.join(__dirname, 'testFile.ts');
|
||||||
const codeSelected = 'console.log("Hello, world!");';
|
const codeSelected = 'console.log("Hello, world!");';
|
||||||
|
|
||||||
const contextFile = await handleCodeSelected(fileSelected, codeSelected);
|
const contextFile = await handleCodeSelected(fileSelected, codeSelected, 0);
|
||||||
|
|
||||||
// Check if the mocked functions were called with the correct arguments
|
// Check if the mocked functions were called with the correct arguments
|
||||||
expect(languageIdStub.calledWith(fileSelected)).to.be.true;
|
expect(languageIdStub.calledWith(fileSelected)).to.be.true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user