Pycharm集成pylint-django
1、安装pylint-django(如果在非django项目可以用pylint)
pip install pylint-django
2、pycharm-External Tools设置
Name:pylintprogram:/Library/Frameworks/Python.framework/Versions/3.7/bin/pylintArguments:--load-plugins pylint_django -rn --rcfile="$ProjectFileDir$"/pylintrc --output-format=colorized "$FilePath$"Working directory:$ProjectFileDir$Output filters:$FILE_PATH$:\s*$LINE$\,\s*$COLUMN$:
解释:
--load-plugins pylint_django 这句是pylint-django的参数.用来loading对django的一些配置. -rn --rcfile="$ProjectFileDir$"/pylintrc 读取当前项目下的pylintrc配置文件
pylintrc配置文件如下:
# lint Python modules using external checkers.## This is the main checker controlling the other ones and the reports# generation. It is itself both a raw checker and an astng checker in order# to:# * handle message activation / deactivation at the module level# * handle some basic but necessary stats'data (number of classes, methods...)#[MASTER]# Specify a configuration file.#rcfile=# Python code to execute, usually for sys.path manipulation such as# pygtk.require().#init-hook=# Profiled execution.profile=no# Addto the black list. It should be a base name, not a# path. You may set this option multiple times.ignore=CVS# Pickle collected data for later comparisons.persistent=no# Set the cache size for astng objects.cache-size=500# List of plugins (as comma separated values of python modules names) to load,# usually to register additional checkers.load-plugins=[MESSAGES CONTROL]# Enable only checker(s) with the given id(s). This option conflicts with the# disable-checker option#enable-checker=# Enable all checker(s) except those with the given id(s). This option# conflicts with the enable-checker option#disable-checker=# Enable all messages in the listed categories.#enable-msg-cat=# Disable all messages in the listed categories.#disable-msg-cat=# Enable the message(s) with the given id(s).#enable-msg=# Disable the message(s) with the given id(s).# I0011: *Locally disabling %s*disable-msg=I0011# 跳过一些无伤大雅的警告, pylint 默认检太严格, http://pylint-messages.wikidot.com/all-codes# https://stackoverflow.com/questions/47348786/how-to-break-a-long-line-in-pylintrc-file## Disable the message(s) with the given id(s).# [C0103(invalid-name), ] Invalid constant name "service_map"# [C0111(missing-docstring), ] Missing module docstring# [C0301(line-too-long), ] Line too long,有些 url 等允许超过 120 列# [C0304(missing-final-newline), ]# [C0325(superfluous-parens), ] Unnecessary parens after u'print' keyword 兼容 python3 的 print# [E0702(raising-bad-type), update_embedded_video] R# [E1120(no-value-for-parameter), update_embedded_vi [R0201(no-self-use), Attacher.make_dom] Method could be a function[W0235(useless-super-delegation), AttacherPin.__init__] Useless super delegation in method '__init__'# [R0201(Method could be a function)# [R0903(too-few-public-methods), ParentType] Too few public methods (0/2)# [R0911(too-many-return-statements), c# [R0912(too-many-branches), check_and_set_video_status] Too many branches (13/12)# [R0913(too-many-arguments), StaingContentError.__init__] Too many arguments (6/5)# [R1705(no-else-return), RelatedVideo.resolve_links] Unnecessary "else" after "return"# [W0105(pointless-string-statement), ] String statement has no effect# [W0108(unnecessary-lambda), VideoFormatter. ]# [W0110(deprecated-lambda),# [W0201(attribute-defined-outside-init), BaseHandler.device_id] Attribute '_device_id' defined outside __init__# [W0221(arguments-differ), ResumableUploadHandler.put] Parameters differ from overridden 'put' method# [W0223(abstract-method), BaseHandler] Method 'data_received' is abstract in class 'RequestHandler' but is not overridden# [W0235(useless-super-delegation), AttacherPin.__init__]# [W0403(relative-import), ]# [W0511(fixme), ]# [W0622(redefined-builtin),# [W0703(broad-except), BaseHandler.device_id] Catching too general exception Exception# [W1202(logging-format-interpolation), fetch_thumbnail_from_vaider] Use % formatting in logging functions and pass the % parameters as arguments# disable = C0103, C0111, C0301, C0304, C0325, E0702, E1120, R0201, R0903, R0911, R0912, R0913, R1705, W0105, W0108, W0110, W0201, W0221, W0223, W0235, W0403, W0511, W0613, W0622, W0703, W1202disable = F5101, W0613, E0401, C0103, C0111, C0301, C0304, C0325, E0702, E1120, R0201, R0903, R0911, R0912, R0913, R1705, W0105, W0108, W0110, W0201, W0221, W0223, W0235, W0403, W0511, W0622, W0703, W1202,[REPORTS]# Set the output format. Available formats are text, parseable, colorized, msvs# (visual studio) and htmloutput-format=parseable# Include message's id in outputinclude-ids=yes# Put messages in a separate file for each module / package specified on the# command line instead of printing them on stdout. Reports (if any) will be# written in a file name "pylint_global.[txt|html]".files-output=no# Tells wether to display a full report or only the messagesreports=no# Python expression which should return a note less than 10 (10 is the highest# note). You have access to the variables errors warning, statement which# respectivly contain the number of errors / warnings messages and the total# number of statements analyzed. This is used by the global evaluation report# (R0004).evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)# Add a comment according to your evaluation note. This is used by the global# evaluation report (R0004).comment=no# Enable the report(s) with the given id(s).#enable-report=# Disable the report(s) with the given id(s).#disable-report=# checks for :# * doc strings# * modules / classes / functions / methods / arguments / variables name# * number of arguments, local variables, branchs, returns and statements in# functions, methods# * required module attributes# * dangerous default values as arguments# * redefinition of function / method / class# * uses of the global statement#[BASIC]# Required attributes for module, separated by a commarequired-attributes=# Regular expression which should only match functions or classes name which do# not require a docstringno-docstring-rgx=__.*__# Regular expression which should only match correct module namesmodule-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$# Regular expression which should only match correct module level namesconst-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$# Regular expression which should only match correct class namesclass-rgx=[A-Z_][a-zA-Z0-9]+$# Regular expression which should only match correct function namesfunction-rgx=[a-z_][a-z0-9_]{2,30}$# Regular expression which should only match correct method namesmethod-rgx=[a-z_][a-z0-9_]{2,30}$# Regular expression which should only match correct instance attribute namesattr-rgx=[a-z_][a-z0-9_]{2,30}$# Regular expression which should only match correct argument namesargument-rgx=[a-z_][a-z0-9_]{2,30}$# Regular expression which should only match correct variable namesvariable-rgx=[a-z_][a-z0-9_]{2,30}$# Regular expression which should only match correct list comprehension /# generator expression variable namesinlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$# Good variable names which should always be accepted, separated by a commagood-names=i,j,k,ex,Run,_# Bad variable names which should always be refused, separated by a commabad-names=foo,bar,baz,toto,tutu,tata# List of builtins function names that should not be used, separated by a commabad-functions=map,filter,apply,input# try to find bugs in the code using type inference#[TYPECHECK]# Tells wether missing members accessed in mixin class should be ignored. A# mixin class is detected if its name ends with "mixin" (case insensitive).ignore-mixin-members=yes# List of classes names for which member attributes should not be checked# (useful for classes with attributes dynamicaly set).ignored-classes=SQLObject# When zope mode is activated, add a predefined set of Zope acquired attributes# to generated-members.zope=no# List of members which are set dynamically and missed by pylint inference# system, and so shouldn't trigger E0201 when accessed.generated-members=REQUEST,acl_users,aq_parent# checks for# * unused variables / imports# * undefined variables# * redefinition of variable from builtins or from an outer scope# * use of variable before assigment#[VARIABLES]# Tells wether we should check for unused import in __init__ files.init-import=no# A regular expression matching names used for dummy variables (i.e. not used).dummy-variables-rgx=_|dummy# List of additional names supposed to be defined in builtins. Remember that# you should avoid to define new builtins when possible.additional-builtins=# checks for :# * methods without self as first argument# * overridden methods signature# * access only to existant members via self# * attributes not defined in the __init__ method# * supported interfaces implementation# * unreachable code#[CLASSES]# List of interface methods to ignore, separated by a comma. This is used for# instance to not check methods defines in Zope's Interface base class.ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by# List of method names used to declare (i.e. assign) instance attributes.defining-attr-methods=__init__,__new__,setUp# checks for sign of poor/misdesign:# * number of methods, attributes, local variables...# * size, complexity of functions, methods#[DESIGN]# Maximum number of arguments for function / methodmax-args=10# Maximum number of locals for function / method bodymax-locals=35# Maximum number of return / yield for function / method bodymax-returns=6# Maximum number of branch for function / method bodymax-branchs=15# Maximum number of statements in function / method bodymax-statements=50# Maximum number of parents for a class (see R0901).max-parents=7# Maximum number of attributes for a class (see R0902).max-attributes=10# Minimum number of public methods for a class (see R0903).min-public-methods=1# Maximum number of public methods for a class (see R0904).max-public-methods=50# checks for# * external modules dependencies# * relative / wildcard imports# * cyclic imports# * uses of deprecated modules#[IMPORTS]# Deprecated modules which should not be used, separated by a commadeprecated-modules=regsub,string,TERMIOS,Bastion,rexec# Create a graph of every (i.e. internal and external) dependencies in the# given file (report R0402 must not be disabled)import-graph=# Create a graph of external dependencies in the given file (report R0402 must# not be disabled)ext-import-graph=# Create a graph of internal dependencies in the given file (report R0402 must# not be disabled)int-import-graph=# checks for :# * unauthorized constructions# * strict indentation# * line length# * use of <> instead of !=#[FORMAT]# Maximum number of characters on a single line.max-line-length=120# Maximum number of lines in a modulemax-module-lines=1000# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1# tab).indent-string=' '# checks for:# * warning notes in the code like FIXME, XXX# * PEP 263: source code with non ascii character but no encoding declaration#[MISCELLANEOUS]# List of note tags to take in consideration, separated by a comma.notes=FIXME,XXX,TODO# checks for similarities and duplicated code. This computation may be# memory / CPU intensive, so you should disable it if you experiments some# problems.#[SIMILARITIES]# Minimum lines number of a similarity.min-similarity-lines=50# Ignore comments when computing similarities.ignore-comments=yes# Ignore docstrings when computing similarities.ignore-docstrings=yes