in src/scip-lib/scanner/scan.go [303:336]
func (is *IndexScannerImpl) parseDocumentPath(docData []byte) (string, error) {
r := bytes.NewReader(docData)
for {
fieldNumber, fieldType, err := is.consumeBytesFieldMeta(r)
if err == io.EOF {
return "", nil
}
if err != nil {
return "", errors.Join(fmt.Errorf("failed to consume field"), err)
}
if fieldNumber != documentRelativePathFieldNumber {
err := is.skipField(r)
if err != nil {
return "", errors.Join(fmt.Errorf("failed to skip %q", documentFieldName(fieldNumber)), err)
}
continue
}
dataLen, err := is.consumeLen(r, fieldType)
if err != nil {
return "", errors.Join(fmt.Errorf("failed to consume length"), err)
}
dataBuf := is.Pool.Get(dataLen)
defer is.Pool.Put(dataBuf)
err = is.consumeFieldData(r, dataLen, dataBuf)
if err != nil {
return "", errors.Join(fmt.Errorf("failed to consume %q data", documentFieldName(fieldNumber)), err)
}
// Return immediately after reading the document path
dataStr := string(dataBuf)
return dataStr, nil
}
}