2015-01-18 2 views
-1

Как я могу кодировать позицию формы /pathto/file.go:40:32, которая возвращается token.Position.String() на номер posFlag, который требуется ParseQueryPos, который выглядит как /pathto/file.go:#550.Какая кодировка требует posFlag?

Почему?

Я использую инструмент Oracle для выполнения некоторого статического анализа. Мне нужно запустить Oracle.Query, для которого требуется параметр типа *QueryPos. Единственный способ получить *QueryPos - ParseQueryPos.

+0

https://github.com/golang/tools/blob/master/oracle/pos.go#L28 говорит, что # 550 является смещением байта, поэтому похоже, что вам нужно пройти через файл, подсчитать байты в первые 39 строк (включая новые строки, разделяющие их), и добавить 31 (если file.go: 1: 1 - байт 0). – twotwotwo

+0

А, и есть «token.Position.Offset», поэтому вам не обязательно все это делать! – twotwotwo

ответ

1

The source to tools/pos.go называют ParseQueryPos говорит

// parsePosFlag parses a string of the form "file:pos" or 
// file:start,end" where pos, start, end match #%d and represent byte 
// offsets, and returns its components. 

Если вы действительно должны были конвертировать из line:column строк, вы посмотрите на содержимое файла и подсчитывать байтов (включая символ новой строки), ведущие к этой строке: столбец. Но поскольку вы работаете с token.Position, похоже, что вы можете получить то, что вам нужно, от token.Position.Offset.

+0

if Pos is byte offeset Мне интересно, почему у нас есть тип Pos и ​​мы просто не используем Offset. Теперь я нашел File.Pos https://godoc.org/go/token#File.Pos –

+0

['token.Position'] (https://godoc.org/go/token#Position) и [' oracle .QueryPos'] (https://github.com/golang/tools/blob/4f8578d2c095328e9192e9d0b0ea335c6ea3e9a5/oracle/oracle.go#L138) каждый несет дополнительную информацию, которая полезна в их соответствующих контекстах, что для меня кажется достаточным оправданием. – twotwotwo

+0

Звучит достаточно справедливо для меня. Любая идея, как получить смещение из файла: line: column? '' oracle.Query.Describe'' [0] предоставляет только то, что я больше не имею доступа к '' токен.Position.Offset''. [0] https://godoc.org/golang.org/x/tools/oracle/serial#Describe.Pos –

Смежные вопросы