mirror of https://github.com/zulip/zulip.git
sgrep: Install syntactic code search tool as an external linter.
Add sgrep (sgrep.dev) to tooling and include simple rule as proof of concept. Included rule detects use of old django render function. Also added a rule that looks for if-else statements where both code paths are identical.
This commit is contained in:
parent
f6503a4061
commit
f65e6d0d94
|
@ -385,6 +385,9 @@ def main(options):
|
||||||
# Install shellcheck.
|
# Install shellcheck.
|
||||||
run_as_root(["tools/setup/install-shellcheck"])
|
run_as_root(["tools/setup/install-shellcheck"])
|
||||||
|
|
||||||
|
# Install sgrep.
|
||||||
|
run_as_root(["tools/setup/install-sgrep"])
|
||||||
|
|
||||||
setup_venvs.main()
|
setup_venvs.main()
|
||||||
|
|
||||||
run_as_root(["cp", REPO_STOPWORDS_PATH, TSEARCH_STOPWORDS_PATH])
|
run_as_root(["cp", REPO_STOPWORDS_PATH, TSEARCH_STOPWORDS_PATH])
|
||||||
|
|
|
@ -92,6 +92,11 @@ def run():
|
||||||
description="Checks commit messages for common formatting errors."
|
description="Checks commit messages for common formatting errors."
|
||||||
"(config: .gitlint)")
|
"(config: .gitlint)")
|
||||||
|
|
||||||
|
sgrep_command = ["sgrep-lint", "--config=./tools/sgrep.yml", "--error"]
|
||||||
|
linter_config.external_linter('sgrep-py', [*sgrep_command, "--lang=python"], ['py'],
|
||||||
|
description="Syntactic Grep (sgrep) Code Search Tool "
|
||||||
|
"(config: ./tools/sgrep.yml)")
|
||||||
|
|
||||||
@linter_config.lint
|
@linter_config.lint
|
||||||
def custom_py():
|
def custom_py():
|
||||||
# type: () -> int
|
# type: () -> int
|
||||||
|
|
|
@ -415,9 +415,6 @@ python_rules = RuleList(
|
||||||
'description': "Don't use datetime in backend code.\n"
|
'description': "Don't use datetime in backend code.\n"
|
||||||
"See https://zulip.readthedocs.io/en/latest/contributing/code-style.html#naive-datetime-objects",
|
"See https://zulip.readthedocs.io/en/latest/contributing/code-style.html#naive-datetime-objects",
|
||||||
},
|
},
|
||||||
{'pattern': r'render_to_response\(',
|
|
||||||
'description': "Use render() instead of render_to_response().",
|
|
||||||
},
|
|
||||||
{'pattern': 'from os.path',
|
{'pattern': 'from os.path',
|
||||||
'description': "Don't use from when importing from the standard library",
|
'description': "Don't use from when importing from the standard library",
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
version=0.4.9b5
|
||||||
|
tarball=sgrep-$version-ubuntu-16.04.tgz
|
||||||
|
sha256=9e57323fd0eb9133b7ff301a6be8361c073c3bfe6e6959ca1b622e5abc176e03
|
||||||
|
tarball_url=https://github.com/returntocorp/sgrep/releases/download/v$version/$tarball
|
||||||
|
|
||||||
|
if ! out="$(sgrep-lint --version 2>/dev/null)" || [[ "$out" != "$version" ]]
|
||||||
|
then
|
||||||
|
tmpdir="$(mktemp -d)"
|
||||||
|
trap 'rm -r "$tmpdir"' EXIT
|
||||||
|
cd "$tmpdir"
|
||||||
|
wget -nv "$tarball_url"
|
||||||
|
sha256sum -c <<< "$sha256 $tarball"
|
||||||
|
tar -xzf "$tarball" -C /usr/local/lib/
|
||||||
|
ln -sf /usr/local/lib/sgrep-lint-files/sgrep-lint /usr/local/bin/sgrep-lint
|
||||||
|
ln -sf /usr/local/lib/sgrep-lint-files/sgrep /usr/local/bin/sgrep
|
||||||
|
fi
|
|
@ -0,0 +1,18 @@
|
||||||
|
# See https://github.com/returntocorp/sgrep/blob/develop/docs/config.md for sgrep rule format
|
||||||
|
|
||||||
|
rules:
|
||||||
|
- id: deprecated-render-usage
|
||||||
|
pattern: django.shortcuts.render_to_response(...)
|
||||||
|
message: Use render() (from django.shortcuts) instead of render_to_response()
|
||||||
|
languages: [python]
|
||||||
|
severity: ERROR
|
||||||
|
- id: useless-if-body
|
||||||
|
patterns:
|
||||||
|
- pattern: |
|
||||||
|
if $X:
|
||||||
|
$S
|
||||||
|
else:
|
||||||
|
$S
|
||||||
|
message: "useless if statment; both blocks have the same body"
|
||||||
|
languages: [python]
|
||||||
|
severity: ERROR
|
|
@ -34,4 +34,4 @@ DESKTOP_WARNING_VERSION = "5.0.0"
|
||||||
# historical commits sharing the same major version, in which case a
|
# historical commits sharing the same major version, in which case a
|
||||||
# minor version bump suffices.
|
# minor version bump suffices.
|
||||||
|
|
||||||
PROVISION_VERSION = '75.5'
|
PROVISION_VERSION = '75.6'
|
||||||
|
|
Loading…
Reference in New Issue