ren-wei / echarts-enhanced-completion

This is an extension of vscode that is used to prompt completion when editing the options of echarts.
MIT License
38 stars 2 forks source link

VSCODE只能出现嵌入的Echarts API补全提示,不能出现Gif中的富文本的悬浮窗口提示 #3

Closed xushaozhi closed 2 years ago

xushaozhi commented 2 years ago

Version

V1.5.4

File type

javascript

Steps to Reproduce

有些电脑可以实现完整的功能,有些只能实现补全。 请问悬浮富文本的提示的原理是怎么实现的?

Current Behavior

-API补全 ——Ok -悬浮框富文本提示——NOK

Expected Behavior

-API补全 -悬浮框富文本提示

Environment

- **OS**:
WIN 10 + VSCODE V1.7 & 1.68 功能补全

WIN 7 + VSCODE 1.68 功能OK

Any additional comments?

No response

ren-wei commented 2 years ago

非常感谢您的反馈!

原理

src/hover.ts 实现了悬浮窗口提示,省略部分内容的核心代码如下:

export function provideHover(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken | null = null): vscode.ProviderResult<vscode.Hover> {
    // 获取鼠标所在位置的最小的 Object 的 ast
    const astItem = ast.getAstItem(document, position);
    const [node, paths] = ast.getMinAstNode(astItem, position);

    // 使用对应的 Markdown 格式的字符串创建一个 vscode.Hover 对象并返回
    const descTreeList = getOptionDesc(paths.slice(0, -1), astItem);
    return new vscode.Hover(new vscode.MarkdownString(descTreeList.find(v => v.name === node?.name)?.desc));
}

const disposables = [
    // 在这里注册它之后,鼠标悬浮时,vscode 会不断调用 provideHover
    vscode.languages.registerHoverProvider(supportedLanguageList, {
        provideHover,
    }),
];

需要重现步骤

由于 ast 是在编辑时根据编辑的内容局部更新的,因此,可能出现 ast 与实际的内容不一致的情况(bug)。 所以,bug 出现与可能与编辑的顺序有关。 需要您提供如何复现的步骤,我才好处理这个问题。

xushaozhi commented 2 years ago

复现步骤:

  1. 安装插件
  2. 创建空的js file
  3. 输入/* @type EChartsOption /
  4. 输入{}
  5. 按enter,现象:只出现代码补全功能,没有富文本提示

同样的步骤,在另外一台电脑上(os : Win7)可以实现完整的功能,同Gif示例。

是否是VS配置导致的? 已检查了hover相关的几个配置,是enable的。

多谢!

ren-wei commented 2 years ago

vscode 本身的悬浮提示是否正常? 比如类似这种的:

(property) xAxis: {
    type: string;
    data: string[];
}
xushaozhi commented 2 years ago

@ren-wei 原因找到了。 插件默认“了解详情”的按钮是disable的(最右侧鼠标悬停后会出现一个expander。。。比较隐秘) 点击expander就能实现功能了。 激活一次以后就默认显示了。

而另外一台电脑默认是enable的。

谢谢,这个工具现在可以很好的使用了。

ren-wei commented 2 years ago

ok