@@ -4,10 +4,13 @@ import { query } from "./query";
4
4
import { encodeRequest } from "./provider" ;
5
5
import snippet from "./snippet" ;
6
6
import { SnippetsTreeProvider , SnippetsTreeItem } from "./snippetsTreeProvider" ;
7
+ import SnippetsStorage from "./snippetsStorage" ;
8
+ import languages from "./languages" ;
7
9
8
10
export interface Request {
9
11
language : string ;
10
12
query : string ;
13
+ savedSnippetContent ?: string ;
11
14
}
12
15
13
16
const loadingStatus = vscode . window . createStatusBarItem (
@@ -20,98 +23,116 @@ export async function findWithProvider(
20
23
userQuery : string ,
21
24
verbose : boolean ,
22
25
number : number ,
23
- openInNewEditor = true
26
+ openInNewEditor = true ,
27
+ savedSnippetContent ?: string
24
28
) {
25
29
let doc : vscode . TextDocument | null = null ;
26
30
27
- loadingStatus . show ( ) ;
28
- try {
29
- const uri = encodeRequest ( userQuery , language , verbose , number ) ;
31
+ if ( ! savedSnippetContent ) {
32
+ loadingStatus . show ( ) ;
33
+ try {
34
+ const uri = encodeRequest ( userQuery , language , verbose , number ) ;
30
35
31
- // Calls back into the provider
32
- doc = await vscode . workspace . openTextDocument ( uri ) ;
33
- } finally {
34
- loadingStatus . hide ( ) ;
35
- }
36
+ // Calls back into the provider
37
+ doc = await vscode . workspace . openTextDocument ( uri ) ;
38
+ } finally {
39
+ loadingStatus . hide ( ) ;
40
+ }
36
41
37
- try {
38
- doc = await vscode . languages . setTextDocumentLanguage ( doc , language ) ;
39
- } catch ( e ) {
40
- console . log ( `Cannot set document language to ${ language } : ${ e } ` ) ;
42
+ try {
43
+ doc = await vscode . languages . setTextDocumentLanguage ( doc , language ) ;
44
+ } catch ( e ) {
45
+ console . log ( `Cannot set document language to ${ language } : ${ e } ` ) ;
46
+ }
41
47
}
48
+
42
49
const editor = vscode . window . activeTextEditor ;
43
50
44
- // Open in new editor in case the respective config flag is set to true
51
+ // Open in new editor in case there is no saved snippet content and the respective config flag is set to true
45
52
// or there is no open user-created editor where we could paste the snippet in.
46
- if ( openInNewEditor || ! editor || editor . document . uri . scheme == "snippet" ) {
53
+ if (
54
+ ! savedSnippetContent &&
55
+ ( openInNewEditor || ! editor || editor . document . uri . scheme == "snippet" )
56
+ ) {
47
57
await vscode . window . showTextDocument ( doc , {
48
58
viewColumn : vscode . ViewColumn . Two ,
49
59
preview : true ,
50
60
preserveFocus : false ,
51
61
} ) ;
52
62
} else {
53
- const snippet = new vscode . SnippetString ( doc . getText ( ) ) ;
63
+ const text = savedSnippetContent ? savedSnippetContent : doc . getText ( ) ;
64
+ const snippet = new vscode . SnippetString ( text ) ;
54
65
const success = await editor . insertSnippet ( snippet ) ;
55
66
if ( ! success ) {
56
67
vscode . window . showInformationMessage ( "Error while opening snippet." ) ;
57
68
}
58
69
}
59
70
}
60
71
61
- export async function getInput ( ) : Promise < Request > {
72
+ export async function getInput (
73
+ snippetsStorage : SnippetsStorage
74
+ ) : Promise < Request > {
62
75
const language = await getLanguage ( ) ;
63
- const userQuery = await query ( language ) ;
64
- return { language, query : userQuery } ;
76
+ const userQuery = await query ( language , snippetsStorage ) ;
77
+ return {
78
+ language,
79
+ query : userQuery . input ,
80
+ savedSnippetContent : userQuery . savedSnippetContent ,
81
+ } ;
65
82
}
66
83
67
- export async function findForLanguage ( ) {
84
+ export async function findForLanguage ( snippetsStorage : SnippetsStorage ) {
68
85
const language = await pickLanguage ( ) ;
69
- const userQuery = await query ( language ) ;
86
+ const userQuery = await query ( language , snippetsStorage ) ;
70
87
await findWithProvider (
71
88
language ,
72
- userQuery ,
89
+ userQuery . input ,
73
90
snippet . getVerbose ( ) ,
74
91
0 ,
75
- getConfig ( "openInNewEditor" )
92
+ getConfig ( "openInNewEditor" ) ,
93
+ userQuery . savedSnippetContent
76
94
) ;
77
95
}
78
96
79
- export async function findDefault ( ) {
80
- const request = await getInput ( ) ;
97
+ export async function findDefault ( snippetsStorage : SnippetsStorage ) {
98
+ const request = await getInput ( snippetsStorage ) ;
81
99
await findWithProvider (
82
100
request . language ,
83
101
request . query ,
84
102
snippet . getVerbose ( ) ,
85
103
0 ,
86
- getConfig ( "openInNewEditor" )
104
+ getConfig ( "openInNewEditor" ) ,
105
+ request . savedSnippetContent
87
106
) ;
88
107
}
89
108
90
- export async function findInplace ( ) {
91
- const request = await getInput ( ) ;
109
+ export async function findInplace ( snippetsStorage : SnippetsStorage ) {
110
+ const request = await getInput ( snippetsStorage ) ;
92
111
await findWithProvider (
93
112
request . language ,
94
113
request . query ,
95
114
snippet . getVerbose ( ) ,
96
115
0 ,
97
- false
116
+ false ,
117
+ request . savedSnippetContent
98
118
) ;
99
119
}
100
120
101
- export async function findInNewEditor ( ) {
102
- const request = await getInput ( ) ;
121
+ export async function findInNewEditor ( snippetsStorage : SnippetsStorage ) {
122
+ const request = await getInput ( snippetsStorage ) ;
103
123
await findWithProvider (
104
124
request . language ,
105
125
request . query ,
106
126
snippet . getVerbose ( ) ,
107
127
0 ,
108
- true
128
+ true ,
129
+ request . savedSnippetContent
109
130
) ;
110
131
}
111
132
112
- export async function showNextAnswer ( ) {
133
+ export async function showNextAnswer ( snippetsStorage : SnippetsStorage ) {
113
134
if ( ! snippet . getCurrentQuery ( ) ) {
114
- return await findDefault ( ) ;
135
+ return await findDefault ( snippetsStorage ) ;
115
136
}
116
137
const answerNumber = snippet . getNextAnswerNumber ( ) ;
117
138
await findWithProvider (
@@ -123,9 +144,9 @@ export async function showNextAnswer() {
123
144
) ;
124
145
}
125
146
126
- export async function showPreviousAnswer ( ) {
147
+ export async function showPreviousAnswer ( snippetsStorage : SnippetsStorage ) {
127
148
if ( ! snippet . getCurrentQuery ( ) ) {
128
- return await findDefault ( ) ;
149
+ return await findDefault ( snippetsStorage ) ;
129
150
}
130
151
const answerNumber = snippet . getPreviousAnswerNumber ( ) ;
131
152
if ( answerNumber == null ) {
@@ -204,8 +225,12 @@ export function saveSnippet(treeProvider: SnippetsTreeProvider) {
204
225
const defaultLabel = content . substring ( 0 , 100 ) ;
205
226
const fileName = editor . document . fileName ;
206
227
const indexOfLastDot = fileName . lastIndexOf ( "." ) ;
228
+ const extensionByLangId =
229
+ languages . getExtensions ( editor . document . languageId ) [ 0 ] || "" ;
207
230
const fileExtension =
208
- indexOfLastDot === - 1 ? "" : fileName . slice ( indexOfLastDot ) ;
231
+ indexOfLastDot === - 1
232
+ ? extensionByLangId
233
+ : fileName . slice ( indexOfLastDot ) ;
209
234
210
235
const nameInputOptions : vscode . InputBoxOptions = {
211
236
ignoreFocusOut : false ,
0 commit comments