Skip to content

Commit 511e9fa

Browse files
authored
Merge pull request #3 from kaigouthro/md-code-blocks
Refactor signature help and add completion items
2 parents 3f70305 + 6ba096e commit 511e9fa

13 files changed

+1915
-725
lines changed

package.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,13 @@
319319
"language": "pine",
320320
"scopeName": "source.pine",
321321
"path": "syntaxes/pine.tmLanguage.json"
322+
},
323+
{
324+
"scopeName": "source.markdown",
325+
"path": "syntaxes/pine-embedded.tmLanguage.json",
326+
"injectTo": [
327+
"text.html.markdown"
328+
]
322329
}
323330
]
324331
},
@@ -349,7 +356,7 @@
349356
"ts-loader": "^9.5.1",
350357
"type-coverage": "^2.0.0",
351358
"typedoc": "^0.26.7",
352-
"typescript": "^5.6.2",
359+
"typescript": "^5.7.3",
353360
"webpack": "^5.94.0",
354361
"webpack-cli": "^5.1.4",
355362
"xo": "^0.54.0"

src/PineClass.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { PineUserInputs } from './PineUserInputs'
77
import { PineHoverProvider } from './PineHoverProvider/PineHoverProvider'
88
import { PineLibCompletionProvider } from './PineLibCompletionProvider'
99
import { PineLibHoverProvider } from './PineLibHoverProvider'
10-
import { PineInlineCompletionContext, PineCompletionProvider } from './PineCompletionProvider'
10+
import { PineInlineCompletionHandler, PineCompletionProvider } from './PineCompletionProvider'
1111
import { PineFormatResponse } from './PineFormatResponse'
1212
import { PineScriptList } from './PineScriptList'
1313
import { PineTemplates } from './PineTemplates'
@@ -28,7 +28,7 @@ export class Class {
2828
public static pineLibHoverProvider: PineLibHoverProvider
2929
public static pineLibCompletionProvider: PineLibCompletionProvider
3030
public static pineSignatureHelpProvider: PineSignatureHelpProvider
31-
public static pineInlineCompletionContext: PineInlineCompletionContext
31+
public static pineInlineCompletionContext: PineInlineCompletionHandler
3232
public static pineCompletionProvider: PineCompletionProvider
3333
public static pineColorProvider: PineColorProvider
3434
public static pineScriptList: PineScriptList
@@ -131,7 +131,7 @@ export class Class {
131131
* Lazy loads and returns an instance of PineInlineCompletionContext.
132132
* @returns {PineInlineCompletionContext} The PineInlineCompletionContext instance.
133133
*/
134-
static get PineInlineCompletionContext(): PineInlineCompletionContext {
134+
static get PineInlineCompletionContext(): PineInlineCompletionHandler {
135135
if (!Class.pineInlineCompletionContext) {
136136
Class.PineCompletionSignatureInitOrder()
137137
}
@@ -148,7 +148,7 @@ export class Class {
148148
}
149149
if (!Class.pineCompletionProvider) {
150150
// console.log('PineCompletionProvider initializing')
151-
Class.pineInlineCompletionContext = new PineInlineCompletionContext()
151+
Class.pineInlineCompletionContext = new PineInlineCompletionHandler()
152152
Class.pineCompletionProvider = new PineCompletionProvider()
153153
}
154154
}

src/PineCompletionProvider.ts

Lines changed: 57 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,76 @@ import * as vscode from 'vscode'
77
* Context for Pine Inline Completion.
88
* Provides necessary information for generating inline completions in Pine Script.
99
*/
10-
export class PineInlineCompletionContext implements vscode.InlineCompletionItemProvider {
11-
selectedCompletionText: string | undefined;
12-
10+
export class PineInlineCompletionHandler {
1311
/**
14-
* Provides inline completion items for the current position in the document.
15-
* @param document - The current document.
16-
* @param position - The current position within the document.
12+
* Handles the selection of an inline completion item.
1713
* @param context - The inline completion context.
18-
* @returns null
1914
*/
20-
provideInlineCompletionItems(document: vscode.TextDocument, position: vscode.Position, context: vscode.InlineCompletionContext): vscode.ProviderResult<vscode.InlineCompletionItem[] | vscode.InlineCompletionList> {
21-
const selectedCompletionText = context.selectedCompletionInfo?.text
15+
handleInlineCompletionSelection(context: vscode.InlineCompletionContext): void {
16+
const selectedCompletionText = context.selectedCompletionInfo?.text;
2217

2318
if (selectedCompletionText) {
24-
this.selectedCompletionText = selectedCompletionText
25-
PineSharedCompletionState.setSelectedCompletion(context.selectedCompletionInfo?.text)
26-
vscode.commands.executeCommand('editor.action.triggerParameterHints')
19+
PineSharedCompletionState.setSelectedCompletion(selectedCompletionText);
20+
vscode.commands.executeCommand('editor.action.triggerParameterHints');
2721
}
22+
}
2823

29-
// console.log(context.selectedCompletionInfo?.text, 'selectedCompletionInfo')
30-
return null
24+
provideInlineCompletionItems(
25+
document: vscode.TextDocument,
26+
position: vscode.Position,
27+
context: vscode.InlineCompletionContext,
28+
token: vscode.CancellationToken
29+
): vscode.ProviderResult<vscode.InlineCompletionItem[] | vscode.InlineCompletionList> {
30+
// Implement your inline completion logic here
31+
return [];
3132
}
3233

3334
/**
3435
* Clears the selected completion text.
3536
*/
36-
clearSelectedCompletion() {
37-
PineSharedCompletionState.setSelectedCompletion(undefined)
37+
clearSelectedCompletion(): void {
38+
PineSharedCompletionState.setSelectedCompletion(undefined);
3839
}
40+
41+
/**
42+
* Registers the completion handler.
43+
* @param context - The extension context.
44+
*/
45+
public static register(context: vscode.ExtensionContext): void {
46+
const completionHandler = new PineInlineCompletionHandler();
47+
48+
context.subscriptions.push(
49+
vscode.window.onDidChangeTextEditorSelection(event => {
50+
const editor = event.textEditor;
51+
if (editor) {
52+
const position = editor.selection.active;
53+
const {document} = editor;
54+
const range = new vscode.Range(position, position);
55+
let selectedInfo = undefined;
56+
57+
// Check if the selection change was triggered by an inline completion
58+
if (event.kind === vscode.TextEditorSelectionChangeKind.Mouse) {
59+
const lastCompletion = PineSharedCompletionState.getLastCompletion();
60+
if (lastCompletion && lastCompletion.range.contains(position)) {
61+
selectedInfo = {
62+
range: lastCompletion.range,
63+
text: lastCompletion.insertText as string
64+
};
65+
}
66+
}
67+
68+
const context: vscode.InlineCompletionContext = {
69+
selectedCompletionInfo: selectedInfo,
70+
triggerKind: vscode.InlineCompletionTriggerKind.Automatic
71+
};
72+
73+
completionHandler.handleInlineCompletionSelection(context);
74+
}
75+
})
76+
);
77+
}
78+
79+
3980
}
4081

4182
export class PineCompletionProvider implements vscode.CompletionItemProvider {

0 commit comments

Comments
 (0)