@@ -4,10 +4,13 @@ import { query } from "./query";
44import { encodeRequest } from "./provider" ;
55import snippet from "./snippet" ;
66import { SnippetsTreeProvider , SnippetsTreeItem } from "./snippetsTreeProvider" ;
7+ import SnippetsStorage from "./snippetsStorage" ;
8+ import languages from "./languages" ;
79
810export interface Request {
911 language : string ;
1012 query : string ;
13+ savedSnippetContent ?: string ;
1114}
1215
1316const loadingStatus = vscode . window . createStatusBarItem (
@@ -20,98 +23,116 @@ export async function findWithProvider(
2023 userQuery : string ,
2124 verbose : boolean ,
2225 number : number ,
23- openInNewEditor = true
26+ openInNewEditor = true ,
27+ savedSnippetContent ?: string
2428) {
2529 let doc : vscode . TextDocument | null = null ;
2630
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 ) ;
3035
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+ }
3641
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+ }
4147 }
48+
4249 const editor = vscode . window . activeTextEditor ;
4350
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
4552 // 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+ ) {
4757 await vscode . window . showTextDocument ( doc , {
4858 viewColumn : vscode . ViewColumn . Two ,
4959 preview : true ,
5060 preserveFocus : false ,
5161 } ) ;
5262 } else {
53- const snippet = new vscode . SnippetString ( doc . getText ( ) ) ;
63+ const text = savedSnippetContent ? savedSnippetContent : doc . getText ( ) ;
64+ const snippet = new vscode . SnippetString ( text ) ;
5465 const success = await editor . insertSnippet ( snippet ) ;
5566 if ( ! success ) {
5667 vscode . window . showInformationMessage ( "Error while opening snippet." ) ;
5768 }
5869 }
5970}
6071
61- export async function getInput ( ) : Promise < Request > {
72+ export async function getInput (
73+ snippetsStorage : SnippetsStorage
74+ ) : Promise < Request > {
6275 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+ } ;
6582}
6683
67- export async function findForLanguage ( ) {
84+ export async function findForLanguage ( snippetsStorage : SnippetsStorage ) {
6885 const language = await pickLanguage ( ) ;
69- const userQuery = await query ( language ) ;
86+ const userQuery = await query ( language , snippetsStorage ) ;
7087 await findWithProvider (
7188 language ,
72- userQuery ,
89+ userQuery . input ,
7390 snippet . getVerbose ( ) ,
7491 0 ,
75- getConfig ( "openInNewEditor" )
92+ getConfig ( "openInNewEditor" ) ,
93+ userQuery . savedSnippetContent
7694 ) ;
7795}
7896
79- export async function findDefault ( ) {
80- const request = await getInput ( ) ;
97+ export async function findDefault ( snippetsStorage : SnippetsStorage ) {
98+ const request = await getInput ( snippetsStorage ) ;
8199 await findWithProvider (
82100 request . language ,
83101 request . query ,
84102 snippet . getVerbose ( ) ,
85103 0 ,
86- getConfig ( "openInNewEditor" )
104+ getConfig ( "openInNewEditor" ) ,
105+ request . savedSnippetContent
87106 ) ;
88107}
89108
90- export async function findInplace ( ) {
91- const request = await getInput ( ) ;
109+ export async function findInplace ( snippetsStorage : SnippetsStorage ) {
110+ const request = await getInput ( snippetsStorage ) ;
92111 await findWithProvider (
93112 request . language ,
94113 request . query ,
95114 snippet . getVerbose ( ) ,
96115 0 ,
97- false
116+ false ,
117+ request . savedSnippetContent
98118 ) ;
99119}
100120
101- export async function findInNewEditor ( ) {
102- const request = await getInput ( ) ;
121+ export async function findInNewEditor ( snippetsStorage : SnippetsStorage ) {
122+ const request = await getInput ( snippetsStorage ) ;
103123 await findWithProvider (
104124 request . language ,
105125 request . query ,
106126 snippet . getVerbose ( ) ,
107127 0 ,
108- true
128+ true ,
129+ request . savedSnippetContent
109130 ) ;
110131}
111132
112- export async function showNextAnswer ( ) {
133+ export async function showNextAnswer ( snippetsStorage : SnippetsStorage ) {
113134 if ( ! snippet . getCurrentQuery ( ) ) {
114- return await findDefault ( ) ;
135+ return await findDefault ( snippetsStorage ) ;
115136 }
116137 const answerNumber = snippet . getNextAnswerNumber ( ) ;
117138 await findWithProvider (
@@ -123,9 +144,9 @@ export async function showNextAnswer() {
123144 ) ;
124145}
125146
126- export async function showPreviousAnswer ( ) {
147+ export async function showPreviousAnswer ( snippetsStorage : SnippetsStorage ) {
127148 if ( ! snippet . getCurrentQuery ( ) ) {
128- return await findDefault ( ) ;
149+ return await findDefault ( snippetsStorage ) ;
129150 }
130151 const answerNumber = snippet . getPreviousAnswerNumber ( ) ;
131152 if ( answerNumber == null ) {
@@ -204,8 +225,12 @@ export function saveSnippet(treeProvider: SnippetsTreeProvider) {
204225 const defaultLabel = content . substring ( 0 , 100 ) ;
205226 const fileName = editor . document . fileName ;
206227 const indexOfLastDot = fileName . lastIndexOf ( "." ) ;
228+ const extensionByLangId =
229+ languages . getExtensions ( editor . document . languageId ) [ 0 ] || "" ;
207230 const fileExtension =
208- indexOfLastDot === - 1 ? "" : fileName . slice ( indexOfLastDot ) ;
231+ indexOfLastDot === - 1
232+ ? extensionByLangId
233+ : fileName . slice ( indexOfLastDot ) ;
209234
210235 const nameInputOptions : vscode . InputBoxOptions = {
211236 ignoreFocusOut : false ,
0 commit comments