Skip to content

Commit c9a0a4f

Browse files
authored
feat: Vue dynamic snippets
feat: Vue dynamic snippets
2 parents 7dccc17 + a3ae081 commit c9a0a4f

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ While using the CLI directly from your terminal is perfectly viable, Nuxtr's int
118118

119119
**Nuxt Snippets**: Enhance your development speed with Nuxt snippets. Simply type `nuxt` for components, `use` for Composables, or begin typing Nuxt utilities and select your desired snippet from the list.
120120

121+
Starting 0.2.10, you can inject a dynamic snippet based on your Nuxtr Vue files configuration with `vueBaseFile` or `vueBaseLayout`.
122+
121123
Nuxt Snippets are enabled by default. You can toggle them on or off using this setting:
122124

123125
```JSON

src/snippets/index.ts

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { extensions } from 'vscode';
1+
import { extensions, MarkdownString, languages, CompletionItem, CompletionItemKind, Position, TextDocument, Range, DocumentHighlight, DocumentHighlightKind } from 'vscode';
22
import * as os from 'os';
33
import { existsSync, move, mkdirSync, readdirSync, removeSync } from 'fs-extra';
44
import { join, resolve } from 'pathe';
5-
import { getConfiguration } from '../utils';
5+
import { getConfiguration, languageSelector, generateVueFileBasicTemplate } from '../utils';
66

77
export enum SnippetSource {
88
nuxt = 'Nuxt',
@@ -48,3 +48,51 @@ export const toggleSnippets = async () => {
4848
await manageSnippetState(SnippetSource.nuxt, snippetsConfigurations.nuxt);
4949
await manageSnippetState(SnippetSource.nitro, snippetsConfigurations.nitro);
5050
}
51+
52+
53+
export const vuePageTemplate = languages.registerCompletionItemProvider(
54+
{ language: 'vue' },
55+
{
56+
provideCompletionItems(document: TextDocument, position: Position) {
57+
const completionItem = new CompletionItem('vueBaseFile', CompletionItemKind.Snippet);
58+
completionItem.detail = 'Generate a Vue page/component template';
59+
60+
const template = generateVueFileBasicTemplate('page');
61+
62+
// Create a MarkdownString for documentation with code highlighting
63+
const documentation = new MarkdownString();
64+
documentation.appendMarkdown(`Generate a Vue page/component template according to your Nuxtr configuration.\n\n`);
65+
documentation.appendCodeblock(template, 'vue'); // Specify 'vue' as the language for code block highlighting
66+
67+
completionItem.documentation = documentation;
68+
completionItem.kind = CompletionItemKind.Snippet;
69+
completionItem.insertText = template;
70+
71+
return [completionItem];
72+
}
73+
}
74+
);
75+
76+
77+
export const vueBaseTemplate = languages.registerCompletionItemProvider(
78+
{ language: 'vue' },
79+
{
80+
provideCompletionItems(document: TextDocument, position: Position) {
81+
const completionItem = new CompletionItem('vueBaseLayout', CompletionItemKind.Snippet);
82+
completionItem.detail = 'Generate a Vue file template';
83+
84+
const template = generateVueFileBasicTemplate('layout');
85+
86+
// Create a MarkdownString for documentation with code highlighting
87+
const documentation = new MarkdownString();
88+
documentation.appendMarkdown(`Generate a Vue file template according to your Nuxtr configuration.\n\n`);
89+
documentation.appendCodeblock(template, 'vue'); // Specify 'vue' as the language for code block highlighting
90+
91+
completionItem.documentation = documentation;
92+
completionItem.kind = CompletionItemKind.Snippet;
93+
completionItem.insertText = template;
94+
95+
return [completionItem];
96+
}
97+
}
98+
);

ui/build/assets/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)