0%

vscode中对python进行修改符号名重构时总是失败

最近在vscode中重构python代码,修改符号名时总是失败,报如下错误:

Refactor failed. expected string or buffer
[(‘refactor.py’, 294, ‘watch’, ‘self._process_request(self._input.readline())’), (‘refactor.py’, 275, ‘_process_request’, “request[‘start’]), request[‘name’], int(request[‘indent_size’]))”), (‘refactor.py’, 206, ‘_rename’, ‘refactor.refactor()’), (‘refactor.py’, 117, ‘refactor’, ‘self.onRefactor()’), (‘refactor.py’, 139, ‘onRefactor’, ‘changes = renamed.get_changes(self._newName, task_handle=self.handle)’), (‘D:\Programs\Anaconda2\lib\site-packages\rope\refactor\rename.py’, 97, ‘get_changes’, 'new_content = rename_in_module(finder, new_name, resource=file)’), …

从报错中可以看到重命名用到了rope,推测可能是rope有bug,经过一番尝试,有两种解决方法。

方法1

vscode:1.41.1

python extensions:2020.1.58038

rope:0.10.5

默认安装的rope版本为0.10.5,尝试升级rope:

$ pip install -U rope
Collecting rope
Using cached https://files.pythonhosted.org/packages/fa/a0/98c936091acad7fe96af3a945a5e4a1ddab9f4a2ba4e6eb56fe469c9457c/rope-0.16.0-py2-none-any.whl
Installing collected packages: rope
Found existing installation: rope 0.10.5
Uninstalling rope-0.10.5:
Successfully uninstalled rope-0.10.5
Successfully installed rope-0.16.0

最新版本为0.16.0,再次尝试修改符号名,问题消失,说明rope确实有bug,已经解决。

方法2

python extensions有两种语言服务器:jedi language server和microsoft python language server,后者是2018.10开始新加入,未来将取代前者,目前默认为前者,前者正是使用rope进行的改名。

image-20200131144645912

尝试切换到后者,去勾选jedi enabled。

image-20200131144414985

重启vscode,会自动下载microsoft python language server,等下载完成后,再次尝试修改符号名,问题消失,在新的language server没有此问题。

新的language server发展时间不长,可能没有老的稳定,大家慎重使用。

-------------本文结束感谢您的阅读-------------