VS code not underlining errors - python

Problem: VS Code is not underlining errors (with wavy red underlining) as it used to.
Problem exists for me and my friend (macOS and Windows)
Linter: mypy
settings.json:
{
"python.pythonPath": "/Users/username/.pyenv/versions/3.8.5/bin/python",
"python.linting.pylintEnabled": false,
"python.linting.mypyEnabled": true,
"python.linting.enabled": true
}
After running the script VS will underline found errors, but still wont underline any newly written errors.
When typing anything in the script, OUTPUT:python shows the following (or simular), which i dont understand and am not sure if its relevant:
Error 2020-11-09 20:20:07: stderr jediProxy Error (stderr) /Users/username/.vscode/extensions/ms-python.python-2020.10.332292344/pythonFiles/completion.py:584: DeprecationWarning: Deprecated since version 0.16.0. Use Script(...).get_names instead.
jedi.api.names(
Error 2020-11-09 20:20:27: stderr jediProxy Error (stderr) /Users/username/.vscode/extensions/ms-python.python-2020.10.332292344/pythonFiles/completion.py:592: DeprecationWarning: Providing the line is now done in the functions themselves like `Script(...).complete(line, column)`
script = jedi.Script(
/Users/username/.vscode/extensions/ms-python.python-2020.10.332292344/pythonFiles/completion.py:592: DeprecationWarning: Deprecated since version 0.17.0. Use the project API instead, which means Script(project=Project(dir, sys_path=sys_path)) instead.
script = jedi.Script(
Error 2020-11-09 20:20:27: stderr jediProxy Error (stderr) /Users/username/.vscode/extensions/ms-python.python-2020.10.332292344/pythonFiles/completion.py:105: DeprecationWarning: Deprecated since version 0.16.0. Use Script(...).get_signatures instead.
call_signatures = script.call_signatures()
/Users/username/.vscode/extensions/ms-python.python-2020.10.332292344/pythonFiles/completion.py:230: DeprecationWarning: Deprecated since version 0.16.0. Use Script(...).complete instead.
completions = script.completions()
Thanks for helping!

Related

Python in VSCode: Syntax highlighting, tabs and no pep8

I have reinstalled my PC and get crazy about initialising VScode correctly.
I want to use syntax highlighting in Python, I use tabs instead of space and I don't want to see pep8 warnings.
After ours of debugging, I dont have syntax highlighting, errors due to tabs and I see all pep8 warnings.🙈
I have installed Python and Pylance as extensions and currently, my settings.json looks like this:
{
"[python]": {
"editor.insertSpaces": true,
"editor.tabSize": 4
},
"python.linting.enabled": false,
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true
},
"java.semanticHighlighting.enabled": true,
"terminal.integrated.enableMultiLinePasteWarning": false
}
Is there anybody who can knows what to do?
Edit: After reloading, the messages about space vs tabs have disappeared.
If you want to ignore the messages prompted by the pylint you can add this in the settings.json:
"python.linting.pylintArgs": ["--disable", "C"],
And it means this:
Convention (C)
Refactor (R)
Warning (W)
Error (E)
Fatal (F)
And you can do it like this to disable multi types of the message:
"python.linting.pylintArgs": ["--disable", "C,R,W"],

Show all non-critical typing errors as warnings

In VSCode's settings.json, I enabled PyLance's type checking:
"python.analysis.typeCheckingMode": "basic"
This shows all typing issues as errors (underlined in red), even when code is valid Python and will run with no issue.
For example, the following code is valid Python, and works:
if 4 % 2 == 0:
a = 3
print(a)
...but PyLance shows an error because of the case where a is unbound:
I want to only mark as "errors" the actual syntax errors that will be rejected by Python, and mark everything else as warnings. I can do it for one category with:
"python.analysis.diagnosticSeverityOverrides": {
"reportGeneralTypeIssues": "warning"
}
How can I do that for all such errors?
Sorry, but I am afraid you only can override the diagnostic severity explicitly one by one.
Such as set "reportUnboundVariable": "warning", to change the error to warning which you have metioned in the above.
But, there is no way to change all of them one time.

DeprecationWarning: `np.bool`

I am new to Python using Spyder. I have written the following code:
import os
import numpy as np
os.environ["CDF_LIB"] = "D:\Anaconda\Lib"
from spacepy import pycdf
cdf = pycdf.CDF('Sample.cdf')
print(cdf) # Print the titles of the CDF file
Diff_en=cdf['diff'][:]
For some reason I keep getting the following error and I'm not sure why (I don't know what bool is). Any help is appreciated:
Diff_en=cdf['diff'][:]
D:\Anaconda\lib\site-packages\spacepy\pycdf\__init__.py:3957: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
This is a harmless warning. If you can live with it, just leave it be.
It comes about because the NumPy package recently deprecated its numpy.bool in favour of the standard Python bool (or alternatively the awkward numpy.bool_), as stated on the documentation page linked in your warning message.
If you can't stand the warning, I suggest you try updating spacepy. You can also silence the warning explicitly from within your project.
As the other answer notes, it's a warning and generally won't affect anything.
The following code can be used to selectively silence this particular DeprecationWarning
from warnings import filterwarnings
filterwarnings(action='ignore', category=DeprecationWarning, message='`np.bool` is a deprecated alias')

Why does the default pylintrc have so many disabled messages?

If you run pylint --generate-rcfile > pylintrc and look at the default rc file you'll see the following list of disabled warnings.
Why are they disabled by default?
disable=print-statement,
parameter-unpacking,
unpacking-in-except,
old-raise-syntax,
backtick,
long-suffix,
old-ne-operator,
old-octal-literal,
import-star-module-level,
non-ascii-bytes-literal,
raw-checker-failed,
bad-inline-option,
locally-disabled,
locally-enabled,
file-ignored,
suppressed-message,
useless-suppression,
deprecated-pragma,
apply-builtin,
basestring-builtin,
buffer-builtin,
cmp-builtin,
coerce-builtin,
execfile-builtin,
file-builtin,
long-builtin,
raw_input-builtin,
reduce-builtin,
standarderror-builtin,
unicode-builtin,
xrange-builtin,
coerce-method,
delslice-method,
getslice-method,
setslice-method,
no-absolute-import,
old-division,
dict-iter-method,
dict-view-method,
next-method-called,
metaclass-assignment,
indexing-exception,
raising-string,
reload-builtin,
oct-method,
hex-method,
nonzero-method,
cmp-method,
input-builtin,
round-builtin,
intern-builtin,
unichr-builtin,
map-builtin-not-iterating,
zip-builtin-not-iterating,
range-builtin-not-iterating,
filter-builtin-not-iterating,
using-cmp-argument,
eq-without-hash,
div-method,
idiv-method,
rdiv-method,
exception-message-attribute,
invalid-str-codec,
sys-max-int,
bad-python3-import,
deprecated-string-function,
deprecated-str-translate-call,
deprecated-itertools-function,
deprecated-types-field,
next-method-defined,
dict-items-not-iterating,
dict-keys-not-iterating,
dict-values-not-iterating
From the documentation's Frequently Asked Questions...
Why are there a bunch of messages disabled by default?
pylint does have some messages disabled by default, either because
they are prone to false positives or that they are opinionated enough
for not being included as default messages. But most of the disabled
messages are from the Python 3 porting checker, which is disabled by
default. It needs special activation with the --py3k flag.
I think that such default rc file is designed to apply pylint to python2 code without tons of errors and warnings. Note: most of the disabled statements belongs to python2 syntax and standard library api:
print-statement - print was a statement in Python2, in Python3 it is a function
old-raise-syntax - there was except Exception, e syntax that is invalid for Python3, in Python3 except Exception as e is only valid
xrange-builtin - xrange was replaced with range
etc.
So, with this default rc you can use pylint for python2 code to find out such things as redefined-outer-name, line-too-long and other bad things without getting annoying errors and warnings for valid Python2 syntax and standard library calls.

Python slimit minimizer unwanted warning output

from slimit import minify
if __name__ == "__main__":
print("start")
# Normally, I pass real JavaScript. For this issue, an empty string reproduces problem.
minify("", mangle=True)
print("exit")
This triggers the following console output.
start
WARNING: Couldn't write lextab module <module 'slimit.lextab' from '/Users/kurtostfeld/samba/wrapad/venv/lib/python2.7/site-packages/slimit/lextab.pyc'>. Won't overwrite existing lextab module
WARNING: yacc table file version is out of date
WARNING: Token 'IMPORT' defined, but not used
WARNING: Token 'BLOCK_COMMENT' defined, but not used
WARNING: Token 'ENUM' defined, but not used
WARNING: Token 'EXTENDS' defined, but not used
WARNING: Token 'LINE_COMMENT' defined, but not used
WARNING: Token 'LINE_TERMINATOR' defined, but not used
WARNING: Token 'CONST' defined, but not used
WARNING: Token 'EXPORT' defined, but not used
WARNING: Token 'CLASS' defined, but not used
WARNING: Token 'SUPER' defined, but not used
WARNING: There are 10 unused tokens
WARNING: Couldn't create <module 'slimit.yacctab' from '/Users/kurtostfeld/samba/wrapad/venv/lib/python2.7/site-packages/slimit/yacctab.pyc'>. Won't overwrite existing tabmodule
exit
These warnings are flooding my application console output. How can I use minify without generating warnings?
I'm using Python 2.7.12, and what is currently the latest library versions: slimit 0.8.1, ply 3.10.
According to this issue on Github, slimit depends of the ply package. After few tries, it seems that theses warnings appear since version 3.8 of ply. . You could update ply to 3.6 which is the last version that doesn't bring these messages :
pip uninstall ply -y && pip install ply==3.6
It solved my problem.
UPDATE
Install a sooner version of ply was really a bad work around since some of my tests were failing. Original slimit version seems not maintained well so I suggest to update to a newer version, metatoaster did a good job to improve it and fixed that problem of warning message. The solution for me was to uninstall slimit and then install it's version:
pip install git+https://github.com/metatoaster/slimit.git#egg=slimit
FINAL UPDATE In fact, slimit seems not maintened anymore and its successor is called calmjs, there is few differences but it is really more stable and don't shows these annoying warning message. See: https://github.com/calmjs/calmjs.parse
Switching versions did not change anything for me, I found another workaround: simply delete (or move, if you want to be cautious) the mentioned files (yourpython/site-packages/slimit/yacctab.py and yourpython/site-packages/slimit/lextab.py).
I believe the module will re-create these files and stop bothering you with warning messages.
Slimit uses ply under the hood, which uses logging from stdlib. AFAICS slimit does not allow you to pass the logging parameters that ply's lex and yacc expect.
While you therefor can't (directly) access ply's logging, you should be able to suppress those messages my raising the global logging level:
import logging
...
logging.disable(logging.CRITICAL)
minify("", mangle=True)
logging.disable(logging.NOTSET)
You can use this parser, too: https://github.com/PiotrDabkowski/pyjsparser
It works and is easy to use. It does not handle comments though.
(Neither does calmjs seems to handle comments fully: Its parse function has a parameter to indicate that you want the comments, but as of now, some comments seem to get lost.)
Here was the solution that I went with. I made a custom variant of two slimit functions that pass an extra errorlog=ply.yacc.NullLogger() call to the ply.yacc.yacc function.
class SlimitNoLoggingParser(Parser):
"""
This is a simple customized variant to slimit.parser.Parser.
The only difference is that this passes a errorlog=ply.yacc.NullLogger() to ply.yacc.yacc to suppress unwanted
stderr logging output.
"""
def __init__(self, lex_optimize=True, lextab=lextab,
yacc_optimize=True, yacctab=yacctab, yacc_debug=False):
self.lex_optimize = lex_optimize
self.lextab = lextab
self.yacc_optimize = yacc_optimize
self.yacctab = yacctab
self.yacc_debug = yacc_debug
self.lexer = Lexer()
self.lexer.build(optimize=lex_optimize, lextab=lextab)
self.tokens = self.lexer.tokens
self.parser = ply.yacc.yacc(
module=self, optimize=yacc_optimize,
errorlog=ply.yacc.NullLogger(),
debug=yacc_debug, tabmodule=yacctab, start='program')
# https://github.com/rspivak/slimit/issues/29
# lexer.auto_semi can cause a loop in a parser
# when a parser error happens on a token right after
# a newline.
# We keep record of the tokens that caused p_error
# and if the token has already been seen - we raise
# a SyntaxError exception to avoid looping over and
# over again.
self._error_tokens = {}
# This is a simply variant of slimit.minify that suppresses unwanted noisy stderr logging output.
def warning_free_minify(text, mangle=False, mangle_toplevel=False):
parser = SlimitNoLoggingParser(lex_optimize=False)
tree = parser.parse(text)
if mangle:
mangler.mangle(tree, toplevel=mangle_toplevel)
minified = ECMAMinifier().visit(tree)
return minified

Categories