TypeScript 重构:移动到新文件不起作用

kcrjzv8t  于 8个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(149)

这个问题在使用所有扩展都被禁用时是否会发生?:是的

  • VS Code 版本:版本:1.92.1(通用)
  • OS 版本:MacOS Sonoma 14.5 / Apple M1 Pro

重现步骤:

  1. 重构 > 移动到新文件
    我已经尝试过的方法:
  2. 使用 --disable-extensions 运行以确保它不是包的问题。
  3. typescript.tsserver.enableTrace
  4. 寻找最小示例
  5. 搜索类似问题:Refactor: move to new file does not work vscode#51586,Refactor > Move to a new file -- not working (update, nothing in Refactor menu working) vscode#58711
    在之前的几个版本中它可以正常工作。我不知道确切是哪个版本没问题。
    更新:不起作用:
  1. import { useLatest } from 'react-use';
  2. export function useUseLatest (data: string) {
  3. return useLatest(data);
  4. }

不起作用:

  1. import { selectStore, useSelector } from '@proterm/core';
  2. export function useOrders() {
  3. return useSelector(selectStore);
  4. }

不起作用:

  1. import { selectStore } from '@proterm/core';
  2. export function useOrders() {
  3. return selectStore;
  4. }

起作用:

  1. import { AnyBaseOrder } from '@terminal/scalp/types';
  2. export function useOrders(symbolId: string): AnyBaseOrder[] {}

起作用:

  1. import { useSelector } from 'react-redux';
  2. function useOrders() {
  3. return useSelector((state) => console.log(state));
  4. }

起作用:

  1. import { selectStore, useSelector } from '@proterm/core';
  2. export function useOrders(symbolId: string): AnyBaseOrder[] {}

我认为 @ import aliases 是问题所在,但这个也可以:

  1. import { FancyAlertCircleIcon } from '@terminal/icons';
  2. export function useOrders() {
  3. return FancyAlertCircleIcon;
  4. }

错误:

  1. 2024-08-15 18:42:15.101 [error] <semantic> TypeScript Server Error (5.5.4)
  2. Debug Failure.
  3. Error: Debug Failure.
  4. at Object.addImportFromExportedSymbol (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:154243:32)
  5. at /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:144288:19
  6. at Map.forEach (<anonymous>)
  7. at addTargetFileImports (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:144282:17)
  8. at getNewStatementsAndRemoveFromOldFile (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:143512:3)
  9. at doChange4 (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:144488:3)
  10. at /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:144477:77
  11. at _ChangeTracker.with (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:174306:5)
  12. at Object.getRefactorEditsToMoveToNewFile [as getEditsForAction] (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:144477:60)
  13. at Object.getEditsForRefactor (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:142603:31)
  14. at Object.getEditsForRefactor2 [as getEditsForRefactor] (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:149939:32)
  15. at IpcIOSession.getEditsForRefactor (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:191087:49)
  16. at getEditsForRefactor (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:189305:43)
  17. at /Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:191491:69
  18. at IpcIOSession.executeWithRequestId (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:191483:14)
  19. at IpcIOSession.executeCommand (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:191491:29)
  20. at IpcIOSession.onMessage (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/typescript.js:191533:51)
  21. at process.<anonymous> (/Applications/Visual Studio Code.app/Contents/Resources/app/extensions/node_modules/typescript/lib/tsserver.js:523:14)
  22. at process.emit (node:events:519:28)
  23. at emit (node:internal/child_process:951:14)
  24. at process.processTicksAndRejections (node:internal/process/task_queues:83:21): Error: <semantic> TypeScript Server Error (5.5.4)
4smxwvx5

4smxwvx51#

tsconfig.json:

  1. {
  2. "compilerOptions": {
  3. "allowSyntheticDefaultImports": true,
  4. "resolveJsonModule": true,
  5. "outDir": "./dist/",
  6. "lib": ["es2018", "dom", "ES2020.Promise", "DOM.Iterable", "es2019.array", "ES2021.String"],
  7. "sourceMap": true,
  8. "strict": true,
  9. "module": "esnext",
  10. "jsx": "react-jsx",
  11. "target": "es2017",
  12. "rootDir": ".",
  13. "allowJs": true,
  14. "moduleResolution": "node",
  15. "noUnusedLocals": true,
  16. "noUnusedParameters": true,
  17. "esModuleInterop": true,
  18. "skipLibCheck": true,
  19. "downlevelIteration": true,
  20. "importHelpers": true,
  21. "experimentalDecorators": true,
  22. "preserveSymlinks": true,
  23. "useUnknownInCatchVariables": false,
  24. // COPY: /webpack/tsconfig.json
  25. // COPY: /webpack/webpack.base.config.ts#alias
  26. // COPY: /.storybook/main.ts
  27. "paths": {
  28. "@proterm/core": ["./src/core"],
  29. "@terminal/*": ["./src/*"]
  30. },
  31. "plugins": [
  32. {
  33. "name": "typescript-plugin-css-modules",
  34. "options": {
  35. "customMatcher": "\\.less$"
  36. }
  37. }
  38. ]
  39. },
  40. "types": ["node", "jest", "@testing-library/jest-dom", "@testing-library/react"],
  41. "include": ["./src/"],
  42. "exclude": ["**/__tests__", "**/*.stories.*", "**/__mock__/*.ts", "**/node_modules", "**/lib"]
  43. }
展开查看全部
kqlmhetl

kqlmhetl2#

因此,@proterm/core是具有重新导出和重新导出的重新导出的大文件的别名。此外,selectStore被声明为奇怪的形式:

  1. function selectStore<State>(store: ReducerStore<State>): (state: any) => State;
  2. function selectStore<State>(store: ReducerStore<State>, state: any): State;
  3. function selectStore<State>(store: ReducerStore<State>, state?: any) {
  4. if (state) {
  5. return select(store, state);
  6. }
  7. function selectStoreCurried(stateCurried: State) {
  8. return select(store, stateCurried);
  9. }
  10. (selectStoreCurried as any)[widgetScope.symbol] = true;
  11. return selectStoreCurried;
  12. }
  13. (selectStore as any)[widgetScope.symbol] = true;
  14. export default selectStore;
展开查看全部
isr3a4wc

isr3a4wc3#

看起来这是一个问题,因为

  1. import { syncSettings } from '@proterm/core';
  2. export function useOrders() {
  3. return syncSettings;
  4. }

作为syncSettings没有多个声明。在保存的时候,我不能移动其他函数,除非参考 selectStore 或者其他类似的东西。例如,这个也不起作用:

  1. import { useCallback, useRef, useState } from 'react';
  2. import { useLatest } from 'react-use';
  3. type Opts = { lastOnly?: boolean };
  4. type Set<D> = (data: D) => void;
  5. export function useSubscriptionProvider<T extends Set<D>, D>(name: string, data: D, opts?: Opts) {
  6. const { lastOnly = true } = opts || {};
  7. const [buffer, setBuffer] = useState<D[]>([]);
  8. const queueRef = useLatest(buffer);
  9. const saveBuffer = useCallback((data: D) => setBuffer((q) => [...q, data]), []);
  10. const ref = useRef<T>();
  11. console.log('hm', { lastOnly, buffer, queueRef, saveBuffer, ref, name, data });
  12. }

目前的问题是来自 'react-use' 的 useLatest ,
最小不起作用的示例:

  1. import { useLatest } from 'react-use';
  2. export function useUseLatest (data: string) {
  3. return useLatest(data);
  4. }
展开查看全部
1cklez4t

1cklez4t4#

我也遇到了这个问题。当我尝试在vscode中移动到新文件时,扩展主机输出中会出现以下错误。

h7appiyu

h7appiyu5#

@navya9singh 有关这个的更新吗?

相关问题