Package: weechat-script-lint
weechat-script-lintWeechat-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/.InstallationThe script requires Python ≥ 3.7.In a Python virtual environment:$ pip install weechat-script-lintUsageSee output ofweechat-script-lint --help.ChecksWhen 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_emailIssue: 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_freeIssue: when an infolist is asked to WeeChat withinfolist_get, it must
always be freed by a call toinfolist_free, otherwise this causes a memory leak.How to fix: callinfolist_freeon each pointer returned by a call toinfolist_get.Error: python2_bin (Python script only)Issue: the infopython2_binis 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 functionhook_processorhook_process_hashtable.Error: mixed_tabs_spaces (Python script only)Issue: mixed tabs and spaces are used for indentation.How to fix: replace all tabs by spaces for indentation.Warning: sys_exit (Python script only)Issue: the functionsys.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 ofweechatfails, that means the script is not executed in WeeChat and then the
call tosys.exit()is harmless.How to fix: ifsys.exit()is called when the import of weechat fails,
consider setting a variable instead that will prevent the call toweechat.registerto be made.Warning: deprecated_hook_completion_get_stringIssue: the functionhook_completion_get_stringis deprecated and should
not be used any more since WeeChat 2.9.How to fix: call the functioncompletion_get_string.Warning: deprecated_hook_completion_list_addIssue: the functionhook_completion_list_addis deprecated and should
not be used any more since WeeChat 2.9.How to fix: call the functioncompletion_list_add.Warning: deprecated_irc_nick_colorIssue: the infoirc_nick_coloris deprecated and should not be used
any more since WeeChat 1.5.How to fix: use the infonick_color.Warning: deprecated_irc_nick_color_nameIssue: the infoirc_nick_color_nameis deprecated and should not be used
any more since WeeChat 1.5.How to fix: use the infonick_color_name.Warning: modifier_irc_inIssue: the modifierirc_in_xxxsends 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 modifierirc_in2_xxx. The modifierirc_in_xxxcan
be used only if the callback operates on the raw IRC message and is prepared
to receive invalid UTF-8 data.Warning: signal_irc_outIssue: the signalirc_out_xxxsends 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 signalirc_out1_xxx.Warning: signal_irc_outtagsIssue: the signalirc_outtags_xxxsends 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 signalirc_out1_xxx.Info: unneeded_shebangIssue: 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_weechatIssue: the WeeChat site URL is not the official one.How to fix: replace the URL by the official one:https://weechat.org(httpsand nowww).ExampleDefault 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 = 44 / 100
Not so good: 1 scripts analyzed, 1 with issues: 2 errors, 1 warnings, 1 info
Exiting with code 2Scripts 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.pyCopyrightCopyright © 2021-2022Sébastien HelleuThis 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, seehttps://www.gnu.org/licenses/.