diff --git a/dist/providers/hoverProvider.js b/dist/providers/hoverProvider.js index 9422982..b6e09fa 100644 --- a/dist/providers/hoverProvider.js +++ b/dist/providers/hoverProvider.js @@ -61,49 +61,55 @@ class HoverProvider { const apiFunction = this.apiParser.getFunctionByName(word); if (apiFunction) { const signature = this.apiParser.generateFunctionSignature(apiFunction); - let hoverContent = `**内置函数**: \`${signature}\`\n\n`; - hoverContent += `${apiFunction.description}\n\n`; + let hoverContent = ` 内置函数: ${signature}\n\n`; + hoverContent += `${apiFunction.description}\n\n`; if (apiFunction.params.length > 0) { - hoverContent += `**参数**:\n`; + hoverContent += `参数:\n`; apiFunction.params.forEach(param => { - hoverContent += `- \`${param.name}: ${param.type}\`${param.optional ? ' (可选)' : ''} - ${param.description}\n`; + hoverContent += `- ${param.name}: ${param.type}${param.optional ? ' (可选)' : ''} - ${param.description}\n`; }); } if (apiFunction.returns) { - hoverContent += `\n**返回值**: \`${apiFunction.returns.type}\` - ${apiFunction.returns.description}`; + hoverContent += `\n返回值: ${apiFunction.returns.type} - ${apiFunction.returns.description}`; } - return new vscode.Hover(new vscode.MarkdownString(hoverContent), range); + const markdownString = new vscode.MarkdownString(hoverContent); + markdownString.isTrusted = true; + return new vscode.Hover(markdownString, range); } // 检查是否是API类 const apiClass = this.apiParser.getClassByName(word); if (apiClass) { const signature = this.apiParser.generateClassSignature(apiClass); - let hoverContent = `**内置类**: \`${signature}\`\n\n`; - hoverContent += `${apiClass.description}\n\n`; + let hoverContent = ` 内置类: ${signature}\n\n`; + hoverContent += `${apiClass.description}\n\n`; if (apiClass.methods.length > 0) { - hoverContent += `**方法**:\n`; + hoverContent += `方法:\n`; apiClass.methods.forEach(method => { const methodSignature = this.apiParser.generateMethodSignature(method); - hoverContent += `- \`${methodSignature}\` - ${method.description}\n`; + hoverContent += `- ${methodSignature} - ${method.description}\n`; }); } if (apiClass.properties.length > 0) { - hoverContent += `\n**属性**:\n`; + hoverContent += `\n属性:\n`; apiClass.properties.forEach(prop => { const propSignature = this.apiParser.generatePropertySignature(prop); - hoverContent += `- \`${propSignature}\` - ${prop.description}\n`; + hoverContent += `- ${propSignature} - ${prop.description}\n`; }); } - return new vscode.Hover(new vscode.MarkdownString(hoverContent), range); + const markdownString = new vscode.MarkdownString(hoverContent); + markdownString.isTrusted = true; + return new vscode.Hover(markdownString, range); } // 检查是否是API常量 const apiConstant = this.apiParser.getConstantByName(word); if (apiConstant) { - let hoverContent = `**常量**: \`${apiConstant.name}\`\n\n`; - hoverContent += `值: ${apiConstant.value}\n\n`; - hoverContent += `${apiConstant.description}\n\n`; - hoverContent += `类别: ${apiConstant.category}`; - return new vscode.Hover(new vscode.MarkdownString(hoverContent), range); + let hoverContent = ` 常量: ${apiConstant.name}\n\n`; + hoverContent += `: ${apiConstant.value}\n\n`; + hoverContent += `${apiConstant.description}\n\n`; + hoverContent += `类别: ${apiConstant.category}`; + const markdownString = new vscode.MarkdownString(hoverContent); + markdownString.isTrusted = true; + return new vscode.Hover(markdownString, range); } // 查找函数信息 const functions = this.cacheManager.findFunctionsByName(word); @@ -113,19 +119,21 @@ class HoverProvider { if (functions.length === 1) { // 单个函数 const func = functions[0]; - hoverContent = `**函数**: \`${func.signature}\`\n\n`; - hoverContent += `**文件**: ${func.filePath}\n\n`; - hoverContent += `**行号**: ${func.lineNumber}`; + hoverContent = `函数: ${func.signature}\n\n`; + hoverContent += `文件: ${func.filePath}\n\n`; + hoverContent += `行号: ${func.lineNumber}`; } else { // 多个同名函数 - hoverContent = `**函数**: ${word}\n\n`; - hoverContent += `在多个文件中定义:\n\n`; + hoverContent = `函数: ${word}\n\n`; + hoverContent += `在多个文件中定义:\n\n`; functions.forEach(func => { - hoverContent += `- \`${func.signature}\` (${func.filePath}:${func.lineNumber})\n`; + hoverContent += `- ${func.signature} (${func.filePath}:${func.lineNumber})\n`; }); } - return new vscode.Hover(new vscode.MarkdownString(hoverContent), range); + const markdownString = new vscode.MarkdownString(hoverContent); + markdownString.isTrusted = true; + return new vscode.Hover(markdownString, range); } // 检查是否是关键字 const keywordInfo = this.getKeywordInfo(word); @@ -142,42 +150,42 @@ class HoverProvider { // 获取关键字信息 getKeywordInfo(word) { const keywordMap = { - 'if': '**条件语句**\n\n用于条件执行代码块', - 'else': '**条件语句**\n\n与if语句配合使用,当if条件不满足时执行', - 'while': '**循环语句**\n\n当条件为真时重复执行代码块', - 'for': '**循环语句**\n\n用于循环执行代码块', - 'foreach': '**循环语句**\n\n遍历数组或表中的每个元素', - 'function': '**函数定义**\n\n用于定义函数', - 'local': '**变量声明**\n\n声明局部变量', - 'return': '**返回语句**\n\n从函数中返回值', - 'class': '**类定义**\n\n用于定义类', - 'extends': '**继承**\n\n用于指定类的父类', - 'constructor': '**构造函数**\n\n类的构造函数', - 'null': '**空值**\n\n表示空值', - 'true': '**布尔值**\n\n表示真值', - 'false': '**布尔值**\n\n表示假值' + 'if': '条件语句\n\n用于条件执行代码块', + 'else': '条件语句\n\n与if语句配合使用,当if条件不满足时执行', + 'while': '循环语句\n\n当条件为真时重复执行代码块', + 'for': '循环语句\n\n用于循环执行代码块', + 'foreach': '循环语句\n\n遍历数组或表中的每个元素', + 'function': '函数定义\n\n用于定义函数', + 'local': '变量声明\n\n声明局部变量', + 'return': '返回语句\n\n从函数中返回值', + 'class': '类定义\n\n用于定义类', + 'extends': '继承\n\n用于指定类的父类', + 'constructor': '构造函数\n\n类的构造函数', + 'null': '空值\n\n表示空值', + 'true': '布尔值\n\n表示真值', + 'false': '布尔值\n\n表示假值' }; return keywordMap[word]; } // 获取常量信息 getConstantInfo(word) { const constantMap = { - 'PI': '**数学常量**\n\n圆周率 π ≈ 3.14159', - 'E': '**数学常量**\n\n自然常数 e ≈ 2.71828', - 'RAND_MAX': '**随机数**\n\n随机数生成器的最大值', - 'CHAR_BIT': '**字符**\n\n一个字节的位数', - 'CHAR_MAX': '**字符**\n\nchar类型的最大值', - 'CHAR_MIN': '**字符**\n\nchar类型的最小值', - 'SHRT_MAX': '**短整型**\n\nshort类型的最大值', - 'SHRT_MIN': '**短整型**\n\nshort类型的最小值', - 'INT_MAX': '**整型**\n\nint类型的最大值', - 'INT_MIN': '**整型**\n\nint类型的最小值', - 'LONG_MAX': '**长整型**\n\nlong类型的最大值', - 'LONG_MIN': '**长整型**\n\nlong类型的最小值', - 'FLT_MAX': '**浮点型**\n\nfloat类型的最大值', - 'FLT_MIN': '**浮点型**\n\nfloat类型的最小值', - 'DBL_MAX': '**双精度浮点型**\n\ndouble类型的最大值', - 'DBL_MIN': '**双精度浮点型**\n\ndouble类型的最小值' + 'PI': '数学常量\n\n圆周率 π ≈ 3.14159', + 'E': '数学常量\n\n自然常数 e ≈ 2.71828', + 'RAND_MAX': '随机数\n\n随机数生成器的最大值', + 'CHAR_BIT': '字符\n\n一个字节的位数', + 'CHAR_MAX': '字符\n\nchar类型的最大值', + 'CHAR_MIN': '字符\n\nchar类型的最小值', + 'SHRT_MAX': '短整型\n\nshort类型的最大值', + 'SHRT_MIN': '短整型\n\nshort类型的最小值', + 'INT_MAX': '整型\n\nint类型的最大值', + 'INT_MIN': '整型\n\nint类型的最小值', + 'LONG_MAX': '长整型\n\nlong类型的最大值', + 'LONG_MIN': '长整型\n\nlong类型的最小值', + 'FLT_MAX': '浮点型\n\nfloat类型的最大值', + 'FLT_MIN': '浮点型\n\nfloat类型的最小值', + 'DBL_MAX': '双精度浮点型\n\ndouble类型的最大值', + 'DBL_MIN': '双精度浮点型\n\ndouble类型的最小值' }; return constantMap[word]; } diff --git a/dist/providers/hoverProvider.js.map b/dist/providers/hoverProvider.js.map index 38c19ad..7f2e867 100644 --- a/dist/providers/hoverProvider.js.map +++ b/dist/providers/hoverProvider.js.map @@ -1 +1 @@ -{"version":3,"file":"hoverProvider.js","sourceRoot":"","sources":["../../src/providers/hoverProvider.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"hoverProvider.js","sourceRoot":"","sources":["../../src/providers/hoverProvider.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 98fee96..20f5837 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "squirrel-nut-explorer", "displayName": "Squirrel NUT Explorer", "description": "通过 pvfUtility API 浏览和编辑 NUT 文件", - "version": "1.0.3", + "version": "1.1.0", "publisher": "local", "engines": { "vscode": "^1.99.0" diff --git a/squirrel-nut-explorer-1.0.3.vsix b/squirrel-nut-explorer-1.0.3.vsix index 901296d..6a4b9ba 100644 Binary files a/squirrel-nut-explorer-1.0.3.vsix and b/squirrel-nut-explorer-1.0.3.vsix differ diff --git a/squirrel-nut-explorer-1.1.0.vsix b/squirrel-nut-explorer-1.1.0.vsix new file mode 100644 index 0000000..6197982 Binary files /dev/null and b/squirrel-nut-explorer-1.1.0.vsix differ diff --git a/src/providers/hoverProvider.ts b/src/providers/hoverProvider.ts index 0dbdaf3..c993df1 100644 --- a/src/providers/hoverProvider.ts +++ b/src/providers/hoverProvider.ts @@ -38,58 +38,64 @@ export class HoverProvider implements vscode.HoverProvider { const apiFunction = this.apiParser.getFunctionByName(word); if (apiFunction) { const signature = this.apiParser.generateFunctionSignature(apiFunction); - let hoverContent = `**内置函数**: \`${signature}\`\n\n`; - hoverContent += `${apiFunction.description}\n\n`; + let hoverContent = ` 内置函数: ${signature}\n\n`; + hoverContent += `${apiFunction.description}\n\n`; if (apiFunction.params.length > 0) { - hoverContent += `**参数**:\n`; + hoverContent += `参数:\n`; apiFunction.params.forEach(param => { - hoverContent += `- \`${param.name}: ${param.type}\`${param.optional ? ' (可选)' : ''} - ${param.description}\n`; + hoverContent += `- ${param.name}: ${param.type}${param.optional ? ' (可选)' : ''} - ${param.description}\n`; }); } if (apiFunction.returns) { - hoverContent += `\n**返回值**: \`${apiFunction.returns.type}\` - ${apiFunction.returns.description}`; + hoverContent += `\n返回值: ${apiFunction.returns.type} - ${apiFunction.returns.description}`; } - return new vscode.Hover(new vscode.MarkdownString(hoverContent), range); + const markdownString = new vscode.MarkdownString(hoverContent); + markdownString.isTrusted = true; + return new vscode.Hover(markdownString, range); } // 检查是否是API类 const apiClass = this.apiParser.getClassByName(word); if (apiClass) { const signature = this.apiParser.generateClassSignature(apiClass); - let hoverContent = `**内置类**: \`${signature}\`\n\n`; - hoverContent += `${apiClass.description}\n\n`; + let hoverContent = ` 内置类: ${signature}\n\n`; + hoverContent += `${apiClass.description}\n\n`; if (apiClass.methods.length > 0) { - hoverContent += `**方法**:\n`; + hoverContent += `方法:\n`; apiClass.methods.forEach(method => { const methodSignature = this.apiParser.generateMethodSignature(method); - hoverContent += `- \`${methodSignature}\` - ${method.description}\n`; + hoverContent += `- ${methodSignature} - ${method.description}\n`; }); } if (apiClass.properties.length > 0) { - hoverContent += `\n**属性**:\n`; + hoverContent += `\n属性:\n`; apiClass.properties.forEach(prop => { const propSignature = this.apiParser.generatePropertySignature(prop); - hoverContent += `- \`${propSignature}\` - ${prop.description}\n`; + hoverContent += `- ${propSignature} - ${prop.description}\n`; }); } - return new vscode.Hover(new vscode.MarkdownString(hoverContent), range); + const markdownString = new vscode.MarkdownString(hoverContent); + markdownString.isTrusted = true; + return new vscode.Hover(markdownString, range); } // 检查是否是API常量 const apiConstant = this.apiParser.getConstantByName(word); if (apiConstant) { - let hoverContent = `**常量**: \`${apiConstant.name}\`\n\n`; - hoverContent += `值: ${apiConstant.value}\n\n`; - hoverContent += `${apiConstant.description}\n\n`; - hoverContent += `类别: ${apiConstant.category}`; + let hoverContent = ` 常量: ${apiConstant.name}\n\n`; + hoverContent += `: ${apiConstant.value}\n\n`; + hoverContent += `${apiConstant.description}\n\n`; + hoverContent += `类别: ${apiConstant.category}`; - return new vscode.Hover(new vscode.MarkdownString(hoverContent), range); + const markdownString = new vscode.MarkdownString(hoverContent); + markdownString.isTrusted = true; + return new vscode.Hover(markdownString, range); } // 查找函数信息 @@ -101,19 +107,21 @@ export class HoverProvider implements vscode.HoverProvider { if (functions.length === 1) { // 单个函数 const func = functions[0]; - hoverContent = `**函数**: \`${func.signature}\`\n\n`; - hoverContent += `**文件**: ${func.filePath}\n\n`; - hoverContent += `**行号**: ${func.lineNumber}`; + hoverContent = `函数: ${func.signature}\n\n`; + hoverContent += `文件: ${func.filePath}\n\n`; + hoverContent += `行号: ${func.lineNumber}`; } else { // 多个同名函数 - hoverContent = `**函数**: ${word}\n\n`; - hoverContent += `在多个文件中定义:\n\n`; + hoverContent = `函数: ${word}\n\n`; + hoverContent += `在多个文件中定义:\n\n`; functions.forEach(func => { - hoverContent += `- \`${func.signature}\` (${func.filePath}:${func.lineNumber})\n`; + hoverContent += `- ${func.signature} (${func.filePath}:${func.lineNumber})\n`; }); } - return new vscode.Hover(new vscode.MarkdownString(hoverContent), range); + const markdownString = new vscode.MarkdownString(hoverContent); + markdownString.isTrusted = true; + return new vscode.Hover(markdownString, range); } // 检查是否是关键字 @@ -134,20 +142,20 @@ export class HoverProvider implements vscode.HoverProvider { // 获取关键字信息 private getKeywordInfo(word: string): string | undefined { const keywordMap: { [key: string]: string } = { - 'if': '**条件语句**\n\n用于条件执行代码块', - 'else': '**条件语句**\n\n与if语句配合使用,当if条件不满足时执行', - 'while': '**循环语句**\n\n当条件为真时重复执行代码块', - 'for': '**循环语句**\n\n用于循环执行代码块', - 'foreach': '**循环语句**\n\n遍历数组或表中的每个元素', - 'function': '**函数定义**\n\n用于定义函数', - 'local': '**变量声明**\n\n声明局部变量', - 'return': '**返回语句**\n\n从函数中返回值', - 'class': '**类定义**\n\n用于定义类', - 'extends': '**继承**\n\n用于指定类的父类', - 'constructor': '**构造函数**\n\n类的构造函数', - 'null': '**空值**\n\n表示空值', - 'true': '**布尔值**\n\n表示真值', - 'false': '**布尔值**\n\n表示假值' + 'if': '条件语句\n\n用于条件执行代码块', + 'else': '条件语句\n\n与if语句配合使用,当if条件不满足时执行', + 'while': '循环语句\n\n当条件为真时重复执行代码块', + 'for': '循环语句\n\n用于循环执行代码块', + 'foreach': '循环语句\n\n遍历数组或表中的每个元素', + 'function': '函数定义\n\n用于定义函数', + 'local': '变量声明\n\n声明局部变量', + 'return': '返回语句\n\n从函数中返回值', + 'class': '类定义\n\n用于定义类', + 'extends': '继承\n\n用于指定类的父类', + 'constructor': '构造函数\n\n类的构造函数', + 'null': '空值\n\n表示空值', + 'true': '布尔值\n\n表示真值', + 'false': '布尔值\n\n表示假值' }; return keywordMap[word]; @@ -156,22 +164,22 @@ export class HoverProvider implements vscode.HoverProvider { // 获取常量信息 private getConstantInfo(word: string): string | undefined { const constantMap: { [key: string]: string } = { - 'PI': '**数学常量**\n\n圆周率 π ≈ 3.14159', - 'E': '**数学常量**\n\n自然常数 e ≈ 2.71828', - 'RAND_MAX': '**随机数**\n\n随机数生成器的最大值', - 'CHAR_BIT': '**字符**\n\n一个字节的位数', - 'CHAR_MAX': '**字符**\n\nchar类型的最大值', - 'CHAR_MIN': '**字符**\n\nchar类型的最小值', - 'SHRT_MAX': '**短整型**\n\nshort类型的最大值', - 'SHRT_MIN': '**短整型**\n\nshort类型的最小值', - 'INT_MAX': '**整型**\n\nint类型的最大值', - 'INT_MIN': '**整型**\n\nint类型的最小值', - 'LONG_MAX': '**长整型**\n\nlong类型的最大值', - 'LONG_MIN': '**长整型**\n\nlong类型的最小值', - 'FLT_MAX': '**浮点型**\n\nfloat类型的最大值', - 'FLT_MIN': '**浮点型**\n\nfloat类型的最小值', - 'DBL_MAX': '**双精度浮点型**\n\ndouble类型的最大值', - 'DBL_MIN': '**双精度浮点型**\n\ndouble类型的最小值' + 'PI': '数学常量\n\n圆周率 π ≈ 3.14159', + 'E': '数学常量\n\n自然常数 e ≈ 2.71828', + 'RAND_MAX': '随机数\n\n随机数生成器的最大值', + 'CHAR_BIT': '字符\n\n一个字节的位数', + 'CHAR_MAX': '字符\n\nchar类型的最大值', + 'CHAR_MIN': '字符\n\nchar类型的最小值', + 'SHRT_MAX': '短整型\n\nshort类型的最大值', + 'SHRT_MIN': '短整型\n\nshort类型的最小值', + 'INT_MAX': '整型\n\nint类型的最大值', + 'INT_MIN': '整型\n\nint类型的最小值', + 'LONG_MAX': '长整型\n\nlong类型的最大值', + 'LONG_MIN': '长整型\n\nlong类型的最小值', + 'FLT_MAX': '浮点型\n\nfloat类型的最大值', + 'FLT_MIN': '浮点型\n\nfloat类型的最小值', + 'DBL_MAX': '双精度浮点型\n\ndouble类型的最大值', + 'DBL_MIN': '双精度浮点型\n\ndouble类型的最小值' }; return constantMap[word];