TypeScript版本:aa3734c
搜索词:
代码
file1.ts
export const abc = 1;
file2.ts
import {abc} from "./file1";
abc; // Rename this one to def
预期行为:
file1.ts
export const def = 1;
file2.ts
import {def} from "./file1";
def; // Rename this one to def
实际行为:
file1.ts
export const def = 1;
file2.ts
import {abc as def} from "./file1";
def; // Rename this one to def
看起来前缀/后缀逻辑假设导出是一个单独的语句,而不是声明本身。
9条答案
按热度按时间xghobddn1#
版本:1.30.0-内部预览版(用户设置)
提交:456e8e64beb2dceac66743959f6802b66e18e300
日期:2018-11-26T11:05:14.406Z
Electron:2.0.12
Chrome:61.0.3163.100
Node.js:8.9.3
V8:6.1.534.41
操作系统:Windows_NT x64 10.0.17763
c90pui9n2#
FYI @mjbvz
6uxekuva3#
@amcasey 我在VS Code 1.30中无法使用TS 3.3.0-dev.20181127的REPO。您认为这是VS Code的问题吗?
8gsdolmq4#
@mjbvz,不,我认为这不是VS Code的问题,我只是觉得你会对此感兴趣,因为编辑器同步中出现了几次新的重命名功能。
balp4ylt5#
我也无法在VS code中复现这个问题,无论是昨天的TypeScript构建。
jdg4fx2g6#
这里有一个更复杂的示例,展示了Code 1.34和typescript@next中的错误:
在
/*1*/
处的Find-all-refs找到了所有四个引用,这是有争议的,因为g
和good
具有不同的名称。在/*1*/
处重命名所有四个引用,这似乎不好,因为g
和good
不是相同的名称,而welove.ts
可能是一个d.ts文件,重命名会导致中断。在这里,在(1)处的find-all-refs找到了最后三行,这似乎没问题。但即使导入是
import { good as go }
,它也似乎是错误的,与export=
示例相同。重命名功能完全失效。在(1)处重命名最后一行,将导入重命名为import { good as go }
,然后错误地重命名了export const go = g
。这种行为在emacs中也是一样的,这是我测试过的唯一其他编辑器。以下是我的tsconfig,以防需要:
deyfvvtc7#
在与@amcasey进行了更多的讨论后,我认为前两个示例的当前行为是可以接受的,因为我们没有可靠方法来判断一个符号是否来自不应该重命名的文件。
然而,这个例子在重命名(以及可能在find-all-refs中)存在一些问题:
gold
。目前它也重命名了所有出现的good
(并且find-all-refs包含了good
)。gold
之外的所有内容。目前就是这样做的。Find-all-refs包含了对gold
的引用,这并不是很好,但还可以接受。mf98qq948#
请注意,这仅影响VS(和emacs),不影响VS Code。我认为新的providePrefixAndSuffixTextForRename方法可以避免这个bug。
ttp71kqs9#
进一步调查显示,服务器有以下情况:
推断出的项目提供了两个错误的引用。我还没有调查过这部分。我认为因此这个问题的优先级相当低,尽管我会和@amcasey确认这种设置的普遍性。
换句话说,如果从上面的tsconfig中删除
"include"
列表,或者将其添加为"app.tsx",则不会重现此问题。