From 00f98bdacaba026e3d16aed36605bc21b72903ab Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Wed, 25 Feb 2015 22:08:50 +0100 Subject: [PATCH] Code quality: Makefile to run static code checkers Relates to #71 Relates to #95 Additions: - Makefile for easy usage, - Composer file to declare dev & test dependencies. Features: - PHP Copy/Paste Detect: detect duplicate code; - PHP Code Sniffer: static analysis, syntax checking, - PHP Mess Detector: static analysis, syntax checking. Signed-off-by: VirtualTam --- .gitignore | 9 ++++- Makefile | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++ composer.json | 14 ++++++++ 3 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 composer.json diff --git a/.gitignore b/.gitignore index 6452c2c..33d8a48 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,11 @@ pagecache .project # Ignore raintpl generated pages -*.rtpl.php \ No newline at end of file +*.rtpl.php + +# Ignore test dependencies +composer.lock +/vendor/ + +# Ignore test output +phpmd.html diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e17c862 --- /dev/null +++ b/Makefile @@ -0,0 +1,94 @@ +# Shaarli, the personal, minimalist, super-fast, no-database delicious clone. +# +# Makefile for PHP code analysis & testing +# +# Prerequisites: +# - install Composer, either: +# - from your distro's package manager; +# - from the official website (https://getcomposer.org/download/); +# - install/update test dependencies: +# $ composer install # 1st setup +# $ composer update +BIN = vendor/bin +PHP_SOURCE = index.php +MESS_DETECTOR_RULES = cleancode,codesize,controversial,design,naming,unusedcode + +all: static_analysis_summary + +## +# Concise status of the project +# +# These targets are non-blocking: || exit 0 +## +static_analysis_summary: code_sniffer_source copy_paste mess_detector_summary + +## +# PHP_CodeSniffer +# +# Detects PHP syntax errors +# +# Documentation (usage, output formatting): +# - http://pear.php.net/manual/en/package.php.php-codesniffer.usage.php +# - http://pear.php.net/manual/en/package.php.php-codesniffer.reporting.php +## +code_sniffer: code_sniffer_full + +# - errors by Git author +code_sniffer_blame: + @$(BIN)/phpcs $(PHP_SOURCE) --report-gitblame + +# - all errors/warnings +code_sniffer_full: + @$(BIN)/phpcs $(PHP_SOURCE) --report-full --report-width=200 + +# - errors grouped by kind +code_sniffer_source: + @$(BIN)/phpcs $(PHP_SOURCE) --report-source || exit 0 + +## +# PHP Copy/Paste Detector +# +# Detects code redundancy +# +# Documentation: https://github.com/sebastianbergmann/phpcpd +## +copy_paste: + @echo "-----------------------" + @echo "PHP COPY/PASTE DETECTOR" + @echo "-----------------------" + @$(BIN)/phpcpd $(PHP_SOURCE) || exit 0 + @echo + +## +# PHP Mess Detector +# +# Detects PHP syntax errors, sorted by category +# +# Rules documentation: http://phpmd.org/rules/index.html +# +mess_title: + @echo "-----------------" + @echo "PHP MESS DETECTOR" + @echo "-----------------" + +# - all warnings +mess_detector: mess_title + @$(BIN)/phpmd $(PHP_SOURCE) text $(MESS_DETECTOR_RULES) | sed 's_.*\/__' + +# - all warnings +# the generated HTML contains links to PHPMD's documentation +mess_detector_html: + @$(BIN)/phpmd $(PHP_SOURCE) html $(MESS_DETECTOR_RULES) \ + --reportfile phpmd.html || exit 0 + +# - warnings grouped by message, sorted by descending frequency order +mess_detector_grouped: mess_title + @$(BIN)/phpmd $(PHP_SOURCE) text $(MESS_DETECTOR_RULES) \ + | cut -f 2 | sort | uniq -c | sort -nr + +# - summary: number of warnings by rule set +mess_detector_summary: mess_title + @for rule in $$(echo $(MESS_DETECTOR_RULES) | tr ',' ' '); do \ + warnings=$$($(BIN)/phpmd $(PHP_SOURCE) text $$rule | wc -l); \ + printf "$$warnings\t$$rule\n"; \ + done; diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..d1f613c --- /dev/null +++ b/composer.json @@ -0,0 +1,14 @@ +{ + "name": "shaarli/shaarli", + "description": "The personal, minimalist, super-fast, no-database delicious clone", + "license": "MIT", + "support": { + "issues": "https://github.com/shaarli/Shaarli/issues" + }, + "require": {}, + "require-dev": { + "phpmd/phpmd" : "@stable", + "sebastian/phpcpd": "*", + "squizlabs/php_codesniffer": "2.*" + } +}