|
|
@@ -0,0 +1,67 @@
|
|
|
+const vscode = require('vscode');
|
|
|
+const path = require('path');
|
|
|
+
|
|
|
+// 组件列表
|
|
|
+// components list
|
|
|
+const componentList = require('./componentList');
|
|
|
+
|
|
|
+function activate(context) {
|
|
|
+ // 如果没有设置,返回undefined
|
|
|
+ // If not set, return undefined
|
|
|
+ const result = vscode.workspace.getConfiguration().get('STDF');
|
|
|
+ // 获取插件语言
|
|
|
+ // Get plugin language
|
|
|
+ const isZh = result.English ? false : true;
|
|
|
+
|
|
|
+ // 读取当前工程的 package.json 文件
|
|
|
+ // Read the package.json file of the current project
|
|
|
+ const packageJson = require(path.join(vscode.workspace.rootPath, 'package.json'));
|
|
|
+ // 判断当前工程是否引入了 stdf 组件库
|
|
|
+ // Determine whether the current project has introduced the stdf component library
|
|
|
+ const isImportStdf = packageJson?.dependencies?.stdf || packageJson?.devDependencies?.stdf ? true : false;
|
|
|
+
|
|
|
+ // 当前文件是 .svelte 文件时且 isImportStdf 为 true 时,才注册悬浮提示
|
|
|
+ // When the current file is a .svelte file and isImportStdf is true, register the hover prompt
|
|
|
+ if (vscode.window.activeTextEditor.document.languageId === 'svelte' && isImportStdf) {
|
|
|
+ vscode.languages.registerHoverProvider('svelte', {
|
|
|
+ provideHover(document, position, token) {
|
|
|
+ // 获取当前悬浮的单词
|
|
|
+ // Get the word currently hovering
|
|
|
+ const word = document.getText(document.getWordRangeAtPosition(position));
|
|
|
+ // 将单词首字母小写
|
|
|
+ // Lowercase the first letter of the word
|
|
|
+ const wordLower = word.charAt(0).toLowerCase() + word.slice(1);
|
|
|
+ // 如果单词为 components 数组中的一项,则显示提示信息,内容为 ../../doc/components/${componentspaths}/api.md 文件的内容
|
|
|
+ // If the word is an item in the components array, the prompt information is displayed, and the content is the content of the ../../doc/components/${componentspaths}/api.md file
|
|
|
+ if (componentList.includes(word)) {
|
|
|
+ // 获取对应组件的 api.md 文件的路径
|
|
|
+ // Get the path of the api.md file of the corresponding component
|
|
|
+ const apiPath = path.join(__dirname, `../../doc/components/${wordLower}/api${isZh ? '' : '_en'}.md`);
|
|
|
+ // 读取 api.md 文件的内容
|
|
|
+ // Read the contents of the api.md file
|
|
|
+ const apiContent = require('fs').readFileSync(apiPath, 'utf-8');
|
|
|
+ // 在 apiContent 后面添加示例、API、指南的链接
|
|
|
+ // Add links to examples, API, and guides after apiContent
|
|
|
+ const baseUrl = 'https://stdf.design/#/components?nav=';
|
|
|
+ const addContent = `**[${isZh ? '示例' : 'Demo'}](${baseUrl}${wordLower}&tab=0&lang=${
|
|
|
+ isZh ? 'zh_CN' : 'en_US'
|
|
|
+ }) [API](${baseUrl}${wordLower}&tab=1&lang=${isZh ? 'zh_CN' : 'en_US'}) [${
|
|
|
+ isZh ? '指南' : 'Guide'
|
|
|
+ }](${baseUrl}${wordLower}&tab=2&lang=${isZh ? 'zh_CN' : 'en_US'})**`;
|
|
|
+ const allContent = apiContent + '\n\n' + '---' + '\n\n' + addContent;
|
|
|
+
|
|
|
+ // 返回提示信息
|
|
|
+ // Return prompt information
|
|
|
+ return new vscode.Hover(allContent);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ });
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function deactivate() {}
|
|
|
+
|
|
|
+module.exports = {
|
|
|
+ activate,
|
|
|
+ deactivate,
|
|
|
+};
|