LINUX.ORG.RU

Обработка выхлопа go test для перехода на место ошибки в Emacs-е

 ,


1

2

Сборка и тестирование сделана как описано в этом отличном howto.

При сборке всё отлично, легко можно перейти на место ошибки. Но при показе места ошибки при тестировании уже беда: они (те кто писал testing) добавляют перед <file>.go:line_no символ табуляции:

	buf := new(bytes.Buffer)
	// Every line is indented at least one tab.
	buf.WriteByte('\t')
	fmt.Fprintf(buf, "%s:%d: ", file, line)
	lines := strings.Split(s, "\n")
	if l := len(lines); l > 1 && lines[l-1] == "" {

получается примерно так. В итоге emacs пытается при нажатии по ссылке открыть файл «\tapiuse_test.go» на 7-ой строке, закономерно фейлится и в итоге запрашивает что за файл нужно открывать. Собственно, можно заменить вызов go test -v на что-то вроде

go test -v 2>&1 | sed -r 's/^\t(.*)$/\1/g' >&2
и всё будет как хочется. Но вдруг можно в самом емаксе настроить игнорирование whitespace-ов перед названием файла? Потому что есть штуки вроде gotest у которых та же самая лажа. Хотелось бы исправить и для них.

Никогда не сталкивался, но вангую, что нужно покрутить compilation-error-regexp-alist чтобы оно игнорировало табы в начале

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

Да, судя по

The default entries in Emacs work for many compilers, but not all, so here’s some tips to allow you to add support for your own compiler. Or you might find it useful if you have your own weird parser, custom build scripts, or even perl HTML templating engine, you can use this method to filter through the compile output, and take you directly to the problem.

в точности то, что нужно. Спасибо!

Joe_Bishop ()
Последнее исправление: Joe_Bishop (всего исправлений: 1 )
Ответ на: комментарий от Joe_Bishop

Чуть полнее, регексп для работы с выхлопом от либы testify:

(add-to-list 'compilation-error-regexp-alist '("^.*Error Trace:[[:space:]]*\\(.*?\\):\\(.+\\)$" 1 2))
(add-to-list 'compilation-error-regexp-alist '("^\t\\(.*?\\):\\([0-9]+\\):.*$" 1 2))
Joe_Bishop ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.