Статические анализаторы кода - это отдельная большая тема для изучения (если коротко, они проверяют код на соответствие настраиваемому набору правил).
Каждая команда/компания как правило имеет свой code style и собственные устоявшиеся наборы правил, по которым работают разработчики.
Сегодня же мне бы хотелось показать, как можно настроить автоматический запуск этих правил.
Но не автоматический запуск на каждое изменение буквы кода (как это позволяют делать ide), но и не делать это вручную.
Моё решение - воспользоваться старым добрым git hooks.
Что для этого нужно:
1. git-репозиторий;
2. файл с правилами;
3. программа анализатор;
Как это будет работать - каждый раз, когда мы соберёмся коммитить ("сохранять") наши изменения, будет срабатывать наш pre-commit скрипт и выполнять проверку.
Что нужно сделать:
1. Взять подготовленный pre-commit script
--------------------------------------------------------------------------------------------------------
И разместить этот скрипт в .git/hooks директории (см. рис.)
2. В настройках git указать переменные:
Готово! После этого просто запускаем 'git commit' и в случае возникновения ошибок, видим их список (с указанием строк и файлов, где они возникли) и коммит при этом создан не будет:
Каждая команда/компания как правило имеет свой code style и собственные устоявшиеся наборы правил, по которым работают разработчики.
Сегодня же мне бы хотелось показать, как можно настроить автоматический запуск этих правил.
Но не автоматический запуск на каждое изменение буквы кода (как это позволяют делать ide), но и не делать это вручную.
Моё решение - воспользоваться старым добрым git hooks.
Что для этого нужно:
1. git-репозиторий;
2. файл с правилами;
3. программа анализатор;
Как это будет работать - каждый раз, когда мы соберёмся коммитить ("сохранять") наши изменения, будет срабатывать наш pre-commit скрипт и выполнять проверку.
Что нужно сделать:
1. Взять подготовленный pre-commit script
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------#!/usr/bin/perl## Pre-commit hookforrunning checkstyle on changed Java sources## Tousethis you need:# 1. checkstyle's jar file somewhere# 2. a checkstyle XML check file somewhere# 3. To configure git:# * git config --add checkstyle.jar <location of jar># * git config --add checkstyle.checkfile <location of checkfile># * git config --add java.command <path to java executale> [optional# defaults to assuming it's in your path]# 4. Put this in your .git/hooks directoryaspre-commit## Now, when you commit, you will be disallowed from doing so# until you pass your checkstyle checks.$command="git-diff-index --cached HEAD 2>&1 | sed 's/^:.* //' | uniq";open (FILES,$command."|") ||die"Cannot run '$command': $!\n";$CONFIG_CHECK_FILE="checkstyle.checkfile";$CONFIG_JAR="checkstyle.jar";$CONFIG_JAVA="java.command";$check_file= `git config --get$CONFIG_CHECK_FILE`;$checkstyle_jar= `git config --get$CONFIG_JAR`;$java_command= `git config --get$CONFIG_JAVA`;if(!$check_file|| !$checkstyle_jar){die"You must configure checkstyle in your git config:\n"."\t$CONFIG_CHECK_FILE - path to your checkstyle.xml file\n"."\t$CONFIG_JAR - path to your checkstyle jar file\n"."\t$CONFIG_JAVA - path to your java executable (optional)\n";}$java_command="java"if(!$java_command);chomp$check_file;chomp$checkstyle_jar;chomp$java_command;$command="$java_command -jar $checkstyle_jar -c $check_file";@java_files = ();foreach(<FILES>){chomp;nextif(!(/\.java$/));push @java_files,$_;$command.=" ";$command.=$_;}if($#java_files >= 0){if(&run_and_log_system ($command)){STDERR"Commit aborted.\n";exit-1;}}exit0;sub run_and_log_system{($cmd) = @_;system$cmd;}
И разместить этот скрипт в .git/hooks директории (см. рис.)
2. В настройках git указать переменные:
$ git config --add checkstyle.jar <location of jar>
[ex. git config --add checkstyle.jar "/d/git/checkstyle-8.14-all.jar"]
$ git config --add checkstyle.checkfile <location of checkfile>
[ex. git config --add checkstyle.checkfile "/d/git/checkstyle.xml"]
$ git config --add java.command <path to java executale>
[optional, defaults to assuming it's in your path]
Готово! После этого просто запускаем 'git commit' и в случае возникновения ошибок, видим их список (с указанием строк и файлов, где они возникли) и коммит при этом создан не будет:

