简体   繁体   English

为什么pylint 的错误波浪线没有显示在python Visual Studio 代码中?

[英]why are pylint's error squiggle lines not showing in python visual studio code?

i'm using vscode for python3 in Ubuntu.我在 Ubuntu 中为 python3 使用 vscode。 Error-squiggle-lines have stopped working for Python(it works for other languages).错误波浪线已停止为 Python 工作(它适用于其他语言)。 And I am using Microsoft's Python extension.我正在使用 Microsoft 的 Python 扩展。
vscode v1.41.1 Ubuntu v18.04 vscode v1.41.1 Ubuntu v18.04

this is what i have tried:这是我尝试过的:

  • I thought maybe it's because i installed anaconda so uninstalled it but didn't fix it.我想也许是因为我安装了 anaconda,所以卸载了它但没有修复它。
  • then I re-installed vs code after deleting its config from .config/code but that didn't work either.然后我从.config/code删除了它的配置后重新安装了 vs .config/code但这也不起作用。
  • also set python linting to true from command palette还从命令面板将 python linting 设置为 true

it's not showing error squiggle lines:它没有显示错误波浪线: 我的 vscode 看起来像这样:

here is the Microsoft's python extension's contributions regarding linting(sorry for poor readability):这是 Microsoft 的 python 扩展对 linting 的贡献(抱歉可读性差):

Whether to lint Python files.   true python.linting.flake8Args  Arguments passed in. Each argument is a separate item in the array.  python.linting.flake8CategorySeverity.E    Severity of Flake8 message type 'E'.    Error python.linting.flake8CategorySeverity.F   Severity of Flake8 message type 'F'.    Error python.linting.flake8CategorySeverity.W   Severity of Flake8 message type 'W'.    Warning python.linting.flake8Enabled    Whether to lint Python files using flake8   false python.linting.flake8Path Path to flake8, you can use a custom version of flake8 by modifying this setting to include the full path.  flake8 python.linting.ignorePatterns    Patterns used to exclude files or folders from being linted.    .vscode/*.py,**/site-packages/**/*.py python.linting.lintOnSave Whether to lint Python files when saved.    true python.linting.maxNumberOfProblems Controls the maximum number of problems produced by the server. 100 python.linting.banditArgs   Arguments passed in. Each argument is a separate item in the array.  python.linting.banditEnabled   Whether to lint Python files using bandit.  false python.linting.banditPath Path to bandit, you can use a custom version of bandit by modifying this setting to include the full path.  bandit python.linting.mypyArgs  Arguments passed in. Each argument is a separate item in the array. --ignore-missing-imports,--follow-imports=silent,--show-column-numbers python.linting.mypyCategorySeverity.error    Severity of Mypy message type 'Error'.  Error python.linting.mypyCategorySeverity.note  Severity of Mypy message type 'Note'.   Information python.linting.mypyEnabled  Whether to lint Python files using mypy.    false python.linting.mypyPath   Path to mypy, you can use a custom version of mypy by modifying this setting to include the full path.  mypy python.linting.pycodestyleArgs Arguments passed in. Each argument is a separate item in the array.  python.linting.pycodestyleCategorySeverity.E   Severity of pycodestyle message type 'E'.   Error python.linting.pycodestyleCategorySeverity.W  Severity of pycodestyle message type 'W'.   Warning python.linting.pycodestyleEnabled   Whether to lint Python files using pycodestyle  false python.linting.pycodestylePath    Path to pycodestyle, you can use a custom version of pycodestyle by modifying this setting to include the full path.    pycodestyle python.linting.prospectorArgs   Arguments passed in. Each argument is a separate item in the array.  python.linting.prospectorEnabled   Whether to lint Python files using prospector.  false python.linting.prospectorPath Path to Prospector, you can use a custom version of prospector by modifying this setting to include the full path.  prospector python.linting.pydocstyleArgs    Arguments passed in. Each argument is a separate item in the array.  python.linting.pydocstyleEnabled   Whether to lint Python files using pydocstyle   false python.linting.pydocstylePath Path to pydocstyle, you can use a custom version of pydocstyle by modifying this setting to include the full path.  pydocstyle python.linting.pylamaArgs    Arguments passed in. Each argument is a separate item in the array.  python.linting.pylamaEnabled   Whether to lint Python files using pylama.  false python.linting.pylamaPath Path to pylama, you can use a custom version of pylama by modifying this setting to include the full path.  pylama python.linting.pylintArgs    Arguments passed in. Each argument is a separate item in the array.  python.linting.pylintCategorySeverity.convention   Severity of Pylint message type 'Convention/C'. Information python.linting.pylintCategorySeverity.error Severity of Pylint message type 'Error/E'.  Error python.linting.pylintCategorySeverity.fatal   Severity of Pylint message type 'Fatal/F'.  Error python.linting.pylintCategorySeverity.refactor    Severity of Pylint message type 'Refactor/R'.   Hint python.linting.pylintCategorySeverity.warning  Severity of Pylint message type 'Warning/W'.    Warning python.linting.pylintEnabled    Whether to lint Python files using pylint.  true python.linting.pylintPath  Path to Pylint, you can use a custom version of pylint by modifying this setting to include the full path.  pylint python.linting.pylintUseMinimalCheckers  Whether to run Pylint with minimal set of rules.    true

python.linting.pylintEnabled is: true python.linting.pylintEnabled 是:true

python.linting.pylintPath is: pylint python.linting.pylintPath 是:pylint

all the errors in visual studio's console of developer tools: Visual Studio 的开发人员工具控制台中的所有错误:

console.ts:137 [Extension Host] Error Python Extension: 2020-01-18 18:35:53: Failed to serialize gatherRules for DATASCIENCE.SETTINGS [TypeError: Cannot convert object to primitive value  at Array.join (<anonymous>) at Array.toString (<anonymous>) at /home/manik/.vscode/extensions/ms-python.python-2020.1.58038/out/client/extension.js:1:12901 at Array.forEach (<anonymous>)  at Object.l [as sendTelemetryEvent] (/home/manik/.vscode/extensions/ms-python.python-2020.1.58038/out/client/extension.js:1:12818)  at C.sendSettingsTelemetry (/home/manik/.vscode/extensions/ms-python.python-2020.1.58038/out/client/extension.js:75:707093) at C.r.value (/home/manik/.vscode/extensions/ms-python.python-2020.1.58038/out/client/extension.js:1:87512) at Timeout._onTimeout (/home/manik/.vscode/extensions/ms-python.python-2020.1.58038/out/client/extension.js:1:86031)    at listOnTimeout (internal/timers.js:531:17)    at processTimers (internal/timers.js:475:7)]
t.log @ console.ts:137
2console.ts:137 [Extension Host] Notification handler 'textDocument/publishDiagnostics' failed with message: Cannot read property 'connected' of undefined
t.log @ console.ts:137
2console.ts:137 [Extension Host] (node:21707) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
t.log @ console.ts:137
$logExtensionHostMessage @ mainThreadConsole.ts:39
_doInvokeHandler @ rpcProtocol.ts:398
_invokeHandler @ rpcProtocol.ts:383
_receiveRequest @ rpcProtocol.ts:299
_receiveOneMessage @ rpcProtocol.ts:226
(anonymous) @ rpcProtocol.ts:101
fire @ event.ts:581
fire @ ipc.net.ts:453
_receiveMessage @ ipc.net.ts:733
(anonymous) @ ipc.net.ts:592
fire @ event.ts:581
acceptChunk @ ipc.net.ts:239
(anonymous) @ ipc.net.ts:200
t @ ipc.net.ts:28
emit @ events.js:200
addChunk @ _stream_readable.js:294
readableAddChunk @ _stream_readable.js:275
Readable.push @ _stream_readable.js:210
onStreamRead @ internal/stream_base_commons.js:166

output for python in output panel: output面板中pythonoutput

User belongs to experiment group 'AlwaysDisplayTestExplorer - control'
User belongs to experiment group 'ShowPlayIcon - start'
User belongs to experiment group 'ShowExtensionSurveyPrompt - enabled'
User belongs to experiment group 'DebugAdapterFactory - experiment'
User belongs to experiment group 'AA_testing - experiment'
> conda --version
> pyenv root
> python3.7 -c "import sys;print(sys.executable)"
> python3.6 -c "import sys;print(sys.executable)"
> python3 -c "import sys;print(sys.executable)"
> python2 -c "import sys;print(sys.executable)"
> python -c "import sys;print(sys.executable)"
> /usr/bin/python3.8 -c "import sys;print(sys.executable)"
> conda info --json
> conda env list
Starting Microsoft Python language server.
> conda --version
> /usr/bin/python3.8 ~/.vscode/extensions/ms-python.python-2020.1.58038/pythonFiles/interpreterInfo.py
> /usr/bin/python3.8 ~/.vscode/extensions/ms-python.python-2020.1.58038/pythonFiles/interpreterInfo.py

how to get the squiggle lines to work again?如何让波浪线再次工作?

In your settings.json file(search for settings.json in the command palette), declare the following:settings.json文件中(在命令面板中搜索settings.json ),声明以下内容:

"python.linting.pylintEnabled": true, "python.jediEnabled": false

if you just want the changes in your workspace then change the settings.json file in .vscode folder如果你只是想在你的工作空间的变化,然后改变settings.json文件.vscode文件夹

In latest version of visual studio code, workspace is not registering settings from checkboxes so you have to explicitly declare in settings.json what settings you want to enable for your workspace.在最新版本的 Visual Studio 代码中,工作区不会从复选框注册设置,因此您必须在 settings.json 中明确声明要为工作区启用的设置。 Flake8 is not affected by this. Flake8 不受此影响。 Pylint and Microsoft Python Language Server seem to be not working due to this.因此,Pylint 和 Microsoft Python 语言服务器似乎无法正常工作。

side note:got this solution from sys-temd's reply on github.com/microsoft/vscode-python/issues旁注:从 sys-temd 在github.com/microsoft/vscode-python/issues上的回复中得到这个解决方案

What I tried but not working我试过但没有用

  1. pip install -U pylint
  2. declare "python.linting.pylintEnabled": true, "python.jediEnabled": false声明"python.linting.pylintEnabled": true, "python.jediEnabled": false

Then I try to recreate a brand-new settings.json, pylint turns out working.然后我尝试重新创建一个全新的 settings.json,结果 pylint 工作正常。

Therefore, I trace which line affects pylint.因此,我会追踪哪条线会影响 pylint。

In my case, it's the line beginning from "python.linting.pylintArgs":就我而言,它是从"python.linting.pylintArgs":开始的行"python.linting.pylintArgs":

Solution解决方案

Removing the line beginning from "python.linting.pylintArgs": will solve the problem.删除从"python.linting.pylintArgs":行将解决问题。

Make sure in your settings you didn't turn off linting (and specifically Pylint if that's what you want to use).确保在您的设置中您没有关闭 linting(如果您想使用它,特别是 Pylint)。 Also make sure you have Pylint installed and the Python extension knows where it is (either by creating an environment and installing into there or installing it globally and setting "python.linting.pylintPath" ).还要确保您安装了 Pylint 并且 Python 扩展知道它在哪里(通过创建环境并安装到那里或全局安装并设置"python.linting.pylintPath" )。 Otherwise check the output of the "Python" channel in the Output Panel to see how Pylint is being executed and make sure that works when you copy-and-paste it into a terminal as appropriate.否则,请检查输出面板中“Python”通道的输出,以查看 Pylint 的执行方式,并确保在您将其适当地复制并粘贴到终端中时可以正常工作。

pip install -U pylint

解决了我的问题

If the main problem is those squiggle lines or some minor errors in the workspace then you can download the 'pylance extension' and enable it in settings of 'python language server'.如果主要问题是工作区中的那些波浪线或一些小错误,那么您可以下载“pylance 扩展”并在“python 语言服务器”的设置中启用它。 This language server is even better (i think) because it is lighter than 'jedi' language server and also tells about the unused modules and variables or even the undefined variables as those squiggle lines show.这个语言服务器甚至更好(我认为),因为它比“绝地”语言服务器更轻,并且还告诉了未使用的模块和变量甚至未定义的变量,如那些波浪线所示。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM