Add style checker

Rename files

Changes from review

Update test/docsCodeStyle.sh

Co-Authored-By: chriseth <chris@ethereum.org>
Update test/docsCodeStyle.sh

Co-Authored-By: chriseth <chris@ethereum.org>
Remove extraneous brackets
This commit is contained in:
Chris Chinchilla 2019-08-05 13:00:30 +02:00
parent 967ee944a5
commit 85ec44826a
6 changed files with 81 additions and 3 deletions

View File

@ -183,6 +183,22 @@ jobs:
name: Check spelling name: Check spelling
command: ~/.local/bin/codespell -S "*.enc,.git" -I ./scripts/codespell_whitelist.txt command: ~/.local/bin/codespell -S "*.enc,.git" -I ./scripts/codespell_whitelist.txt
chk_docs_examples:
docker:
- image: circleci/node
environment:
TERM: xterm
steps:
- checkout
- attach_workspace:
at: build
- run:
name: JS deps
command: sudo npm install -g solhint
- run:
name: Test Docs examples
command: ./test/docsCodeStyle.sh
chk_coding_style: chk_coding_style:
docker: docker:
- image: buildpack-deps:disco - image: buildpack-deps:disco
@ -586,6 +602,7 @@ workflows:
# basic checks # basic checks
- chk_spelling: *workflow_trigger_on_tags - chk_spelling: *workflow_trigger_on_tags
- chk_coding_style: *workflow_trigger_on_tags - chk_coding_style: *workflow_trigger_on_tags
- chk_docs_examples: *workflow_trigger_on_tags
- chk_buglist: *workflow_trigger_on_tags - chk_buglist: *workflow_trigger_on_tags
- chk_proofs: *workflow_trigger_on_tags - chk_proofs: *workflow_trigger_on_tags
@ -646,4 +663,3 @@ workflows:
# Code Coverage enabled build and tests # Code Coverage enabled build and tests
- b_ubu_codecov: *workflow_trigger_on_tags - b_ubu_codecov: *workflow_trigger_on_tags
- t_ubu_codecov: *workflow_ubuntu1904_codecov - t_ubu_codecov: *workflow_ubuntu1904_codecov

View File

@ -59,8 +59,10 @@ def extract_docs_cases(path):
def write_cases(f, tests): def write_cases(f, tests):
cleaned_filename = f.replace(".","_").replace("-","_").replace(" ","_").lower() cleaned_filename = f.replace(".","_").replace("-","_").replace(" ","_").lower()
for test in tests: for test in tests:
open('test_%s_%s.sol' % (hashlib.sha256(test).hexdigest(), cleaned_filename), 'wb').write(test) # When code examples are extracted they indented by 8 spaces, which violates the style guide,
# so before checking remove 4 spaces from each line.
remainder = re.sub(r'^ {4}', '', test, 0, re.MULTILINE)
open('test_%s_%s.sol' % (hashlib.sha256(test).hexdigest(), cleaned_filename), 'wb').write(remainder)
def extract_and_write(f, path): def extract_and_write(f, path):
if docs: if docs:

8
test/.solhint.json Normal file
View File

@ -0,0 +1,8 @@
{
"extends": "solhint:default",
"plugins": [],
"rules": {
"compiler-fixed": false,
"no-inline-assembly": false
}
}

1
test/.solhintignore Normal file
View File

@ -0,0 +1 @@
*contributing_rst*

View File

@ -308,6 +308,7 @@ SOLTMPDIR=$(mktemp -d)
set -e set -e
cd "$SOLTMPDIR" cd "$SOLTMPDIR"
"$REPO_ROOT"/scripts/isolate_tests.py "$REPO_ROOT"/docs/ docs "$REPO_ROOT"/scripts/isolate_tests.py "$REPO_ROOT"/docs/ docs
for f in *.sol for f in *.sol
do do
# The contributors guide uses syntax tests, but we cannot # The contributors guide uses syntax tests, but we cannot
@ -317,6 +318,7 @@ SOLTMPDIR=$(mktemp -d)
continue continue
fi fi
echo "$f" echo "$f"
opts='' opts=''
# We expect errors if explicitly stated, or if imports # We expect errors if explicitly stated, or if imports
# are used (in the style guide) # are used (in the style guide)

49
test/docsCodeStyle.sh Executable file
View File

@ -0,0 +1,49 @@
#!/usr/bin/env bash
set -e
## GLOBAL VARIABLES
REPO_ROOT=$(cd $(dirname "$0")/.. && pwd)
## FUNCTIONS
if [ "$CIRCLECI" ]
then
function printTask() { echo "$(tput bold)$(tput setaf 2)$1$(tput setaf 7)"; }
function printError() { echo "$(tput setaf 1)$1$(tput setaf 7)"; }
else
function printTask() { echo "$(tput bold)$(tput setaf 2)$1$(tput sgr0)"; }
function printError() { echo "$(tput setaf 1)$1$(tput sgr0)"; }
fi
printTask "Checking docs examples style"
SOLTMPDIR=$(mktemp -d)
(
set -e
cd "$SOLTMPDIR"
"$REPO_ROOT"/scripts/isolate_tests.py "$REPO_ROOT"/docs/ docs
if npm -v >/dev/null 2>&1; then
if npm list -g | grep solhint >/dev/null 2>&1; then
echo "node is installed, setting up solhint"
cp "$REPO_ROOT"/test/.solhint.json "$SOLTMPDIR"/.solhint.json
cp "$REPO_ROOT"/test/.solhintignore "$SOLTMPDIR"/.solhintignore
for f in *.sol
do
echo "$f"
# Only report errors
solhint -f unix "$SOLTMPDIR/$f"
done
else
echo "node is installed, but not solhint"
exit 1
fi
else
echo "node not installed, skipping docs style checker"
exit 1
fi
)
rm -rf "$SOLTMPDIR"
echo "Done."