Static analysis tool for WeeChat scripts.
Project description
weechat-script-lint
Weechat-script-lint is a static analysis tool for WeeChat scripts.
It can be used by people writing WeeChat scripts and it is automatically executed in the CI of the WeeChat official scripts repository: https://github.com/weechat/scripts/.
Installation
The script requires Python ≥ 3.7.
In a Python virtual environment:
$ pip install weechat-script-lint
Usage
See output of weechat-script-lint --help
.
Checks
When a script is checked, problems are displayed on output, with one of these levels:
error
: severe problem, the script must be fixed now (the return code of command is the number of errors)warning
: a deprecated feature is used (script may break in future) or there is a minor problem, the script should be fixedinfo
: information; no urgent fix needed.
Error: missing_email
Issue: the e-mail is required if the script is submitted in the official scripts repository (error can be ignored in other cases).
How to fix: add a contact e-mail in the header of the script.
Error: missing_infolist_free
Issue: when an infolist is asked to WeeChat with infolist_get
, it must
always be freed by a call to infolist_free
, otherwise this causes a memory leak.
How to fix: call infolist_free
on each pointer returned by a call to
infolist_get
.
Error: python2_bin (Python script only)
Issue: the info python2_bin
is used to find the path to Python 2.x
interpreter. Since WeeChat is compiled with Python 3 and that all scripts aim
to be compatible with Python 3, this info must not be used at all any more.
Note that some systems may not provide Python 2 at all any more.
How to fix: if the Python interpreter is used to run a background command, consider using function hook_process or hook_process_hashtable.
Warning: sys_exit (Python script only)
Issue: the function sys.exit()
causes WeeChat to exit itself, so it
must not be used in scripts.
This is a warning and not an error because if it is used when the import of
weechat
fails, that means the script is not executed in WeeChat and then the
call to sys.exit()
is harmless.
How to fix: if sys.exit()
is called when the import of weechat fails,
consider setting a variable instead that will prevent the call to
weechat.register
to be made.
Warning: deprecated_hook_completion_get_string
Issue: the function hook_completion_get_string
is deprecated and should
not be used any more since WeeChat 2.9.
How to fix: call the function completion_get_string
.
Warning: deprecated_hook_completion_list_add
Issue: the function hook_completion_list_add
is deprecated and should
not be used any more since WeeChat 2.9.
How to fix: call the function completion_list_add
.
Warning: deprecated_irc_nick_color
Issue: the info irc_nick_color
is deprecated and should not be used
any more since WeeChat 1.5.
How to fix: use the info nick_color
.
Warning: deprecated_irc_nick_color_name
Issue: the info irc_nick_color_name
is deprecated and should not be used
any more since WeeChat 1.5.
How to fix: use the info nick_color_name
.
Warning: modifier_irc_in
Issue: the modifier irc_in_xxx
sends the raw IRC message to the callback
which may not be UTF-8 valid. This is a problem in some languages like Python.
How to fix: use the modifier irc_in2_xxx
. The modifier irc_in_xxx
can
be used only if the callback operates on the raw IRC message and is prepared
to receive invalid UTF-8 data.
Warning: signal_irc_out
Issue: the signal irc_out_xxx
sends the raw IRC message to the callback
which may not be UTF-8 valid. This is a problem in some languages like Python.
How to fix: use the signal irc_out1_xxx
.
Warning: signal_irc_outtags
Issue: the signal irc_outtags_xxx
sends the raw IRC message to the callback
which may not be UTF-8 valid. This is a problem in some languages like Python.
How to fix: use the signal irc_out1_xxx
.
Info: unneeded_shebang
Issue: the shebang is not needed, except if the script can be called outside WeeChat, which is rare.
How to fix: remove the shebang, unless it is really needed.
Info: url_weechat
Issue: the WeeChat site URL is not the official one.
How to fix: replace the URL by the official one: https://weechat.org
(https
and no www
).
Example
Default output:
$ weechat-script-lint script.py
/path/to/script.py:44: info [url_weechat]: URL http://www.weechat.org should be changed to https://weechat.org
/path/to/script.py:45: warning [sys_exit]: sys.exit() causes WeeChat to exit itself
/path/to/script.py:98: error [python2_bin]: the info python2_bin must not be used any more
/path/to/script.py:167: error [missing_infolist_free]: missing call to infolist_free
/path/to/script.py: score = 39 / 100
Not so good: 1 scripts analyzed, 1 with issues: 2 errors, 1 warnings, 1 info
Exiting with code 2
Scripts grouped by score:
$ weechat-script-lint --score --recursive /path/to/directory
2 scripts with score 100 / 100:
/path/to/directory/test.py
/path/to/directory/example.py
3 scripts with score 79 / 100:
/path/to/directory/dummy.py
/path/to/directory/fake.py
/path/to/directory/other.py
Copyright
Copyright © 2021 Sébastien Helleu
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file weechat_script_lint-0.4.0.dev0-py3.9.egg
.
File metadata
- Download URL: weechat_script_lint-0.4.0.dev0-py3.9.egg
- Upload date:
- Size: 44.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 032ccd44002c83f380c94569673eab92202b63d49c0120f00453188654619044 |
|
MD5 | cdd1fb4c897f71a7ed3134d671229577 |
|
BLAKE2b-256 | 919d2b254fe5cbf786454712621818c7e95e2183907e5cf767d63d82689480ee |