在VS Code中,自动导入的下拉菜单似乎有一个随机的顺序。我认为通过按照文件路径与当前文件路径的接近程度对导出的符号进行排序,可以提高用户体验。
示例目录结构如下:
- moduleA/
- constants.ts
- index.ts
- moduleB/
- constants.ts
- index.ts
假设moduleA/constants.ts和moduleB/constants.ts都导出一个名为foobar
的变量。当我在moduleA/index.ts中输入foobar
时,我很可能是想从moduleA/constants.ts自动导入foobar
。
在当前方法中,下拉菜单建议从moduleA/constants.ts和moduleB/constants.ts中选择foobar
,但顺序似乎无法保证,有时会先建议moduleB的foobar
,有时会先建议moduleA的foobar
。我认为可以通过按照它们的源文件路径与当前文件路径的接近程度对建议进行排序来改进这一点,这样当我在moduleA/index.ts时,moduleA的foobar
总是出现在moduleB的foobar
之前。为了完整性起见,我认为当我在moduleB/index.ts时,应该首先显示moduleB的foobar
。
希望我解释得清楚了。
检查清单
我的建议满足以下准则:
- 这不会对现有的TypeScript/JavaScript代码造成破坏性的改变
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发出不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能、JavaScript输出的非ECMAScript语法等)
- 这个特性将与其他特性保持一致。
5条答案
按热度按时间0h4hbjxa1#
我同意,这对我来说非常令人沮丧。在我正在进行的一个项目中,我们利用了一个状态管理库,最终在许多不同的模块中有许多共享相同名称的函数,但最接近模块中的函数是我想要的99.99%。不幸的是,语言服务似乎总是建议我不想要的模块,而最接近的模块经常被埋藏在列表的末尾。看一下下面的图片,没有人类会以这种方式订购建议。
weylhg0b2#
顺序不是随机的 - 首先是非相对的,然后是相对的。在这些内部,它们按路径段数(然后在该范围内按字典序)排序。一般来说,在许多情况下,直接从包中导入(而不是一些深度相对导入)通常是正确的;但我假设你是使用
baseUrl
编译选项给你的一些文件非相对名称?afdcj2ne3#
在我的情况下,是的,我正在使用
baseUrl
。也许排序应该取决于那个设置?qnzebej04#
真的想要这个。TS的自动导入有时甚至会引入循环依赖,如果一个目录在
index.ts
中重新导出内容。mbyulnm05#
我不确定为什么这个在待办事项列表中,这是一个巨大的时间浪费。node_module包总是首先列出,而不是你自己的文件。导入一个包,如aws,你必须滚动很多才能到达自己的文件底部,以$x_{
~/context/...
}$和$x_{}$开头的两个。