Я пишу git-hook в python, который помещает файлы, помещенные в репозиторий, и отклоняет push, если файлы не передают требования к линтингу. Я уже написал подобный крюк для PHP с помощью PHP кода снифер и код выглядит следующим образом:Передача строки в rubocop в виде файла
php_cs = subprocess.Popen(['phpcs', '--standard=' + self._standard], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = php_cs.communicate(input="file contents".encode('utf-8'))
Этот код работает для php_cs, но так же:
cat file.php | phpcs
, который, как я понимаю все код python делает. Я хочу сделать что-то очень похожее на ruby, используя RuboCop.
Используя очень похожий код питона на phpcs версия rubocop выглядит следующим образом:
rubo_cop = subprocess.Popen(['RuboCop'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = rubo_cop.communicate(input="file contents".encode('utf-8'))
выход в этом случае выглядит следующим образом:
Это указывает на то, что rubocop не понимает ввод таким же образом, что и phps, поэтому:
cat file.rb | rubocop
не работает для rubocop
Мой вопрос, как передать строку команде, чтобы она рассматривала ее как файл?
Вы можете запустить его в директорию с файлами? В разделе использования страницы «rubocop» указано, что он по умолчанию проверяет все локальные файлы. Если это не работает, вам, вероятно, нужно будет использовать 'xargs' (или аналогичный) для преобразования стандартного ввода в аргументы командной строки. –
@EtanReisner Это githook работает в удаленном репозитории, поэтому файлы там непосредственно не хранятся, мне нужно иметь возможность использовать git для отображения содержимого файла при определенных версиях. – Thomas
Вы можете попробовать использовать подстановку процессов в bash ('rubocop <(git-command-that-spits-out-file-contents)'), но это может не сработать, если rubocop ожидает «настоящий» файл в качестве аргумента. –