Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 17 additions & 18 deletions cmd/src/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ Other tips:
name
path
url
content
commit {
oid
}
Expand Down Expand Up @@ -323,7 +324,7 @@ func searchHighlightPreview(preview interface{}, start, end string) string {
length := int(h["length"].(float64))
highlights = append(highlights, highlight{line, character, length})
}
return applyHighlights(value, highlights, start, end)
return applyHighlights(&value, highlights, start, end)
}

func searchHighlightDiffPreview(diffPreview interface{}) string {
Expand Down Expand Up @@ -419,20 +420,16 @@ type highlight struct {
length int // the 1-indexed length of the highlight, in characters.
}

func applyHighlights(input string, highlights []highlight, start, end string) string {
func applyHighlights(input *string, highlights []highlight, start, end string) string {
var result []rune
lines := strings.Split(input, "\n")
for lineNumber, line := range lines {
lineNumber++
lines := strings.Split(*input, "\n")
for _, highlight := range highlights {
line := lines[highlight.line]
for characterIndex, character := range []rune(line + "\n") {
for _, highlight := range highlights {
if highlight.line == lineNumber {
if characterIndex == highlight.character {
result = append(result, []rune(start)...)
} else if characterIndex == highlight.character+highlight.length {
result = append(result, []rune(end)...)
}
}
if characterIndex == highlight.character {
result = append(result, []rune(start)...)
} else if characterIndex == highlight.character+highlight.length {
result = append(result, []rune(end)...)
}
result = append(result, character)
}
Expand All @@ -450,17 +447,18 @@ var searchTemplateFuncs = map[string]interface{}{
lineNumber := lineMatches[index].(map[string]interface{})["lineNumber"]
return prevLineNumber.(float64) == lineNumber.(float64)-1
},
"searchHighlightMatch": func(match interface{}) string {
"searchHighlightMatch": func(content interface{}, match interface{}) string {
m := match.(map[string]interface{})
preview := m["preview"].(string)
c := fmt.Sprintf("%v", content)
var highlights []highlight
for _, offsetAndLength := range m["offsetAndLengths"].([]interface{}) {
ol := offsetAndLength.([]interface{})
offset := int(ol[0].(float64))
length := int(ol[1].(float64))
highlights = append(highlights, highlight{line: 1, character: offset, length: length})
line := int(m["lineNumber"].(float64))
highlights = append(highlights, highlight{line: line, character: offset, length: length})
}
return applyHighlights(preview, highlights, ansiColors["search-match"], ansiColors["nc"])
return applyHighlights(&c, highlights, ansiColors["search-match"], ansiColors["nc"])
},
"searchHighlightPreview": func(preview interface{}) string {
return searchHighlightPreview(preview, "", "")
Expand Down Expand Up @@ -549,12 +547,13 @@ const searchResultsTemplate = `{{- /* ignore this line for template formatting s

{{- /* Line matches */ -}}
{{- $lineMatches := .lineMatches -}}
{{- $content := .file.content -}}
{{- range $index, $match := $lineMatches -}}
{{- if not (searchSequentialLineNumber $lineMatches $index) -}}
{{- color "search-border"}}{{" ------------------------------------------------------------------------------\n"}}{{color "nc"}}
{{- end -}}
{{- " "}}{{color "search-line-numbers"}}{{pad (addFloat $match.lineNumber 1) 6 " "}}{{color "nc" -}}
{{- color "search-border"}}{{" | "}}{{color "nc"}}{{searchHighlightMatch $match}}
{{- color "search-border"}}{{" | "}}{{color "nc"}}{{searchHighlightMatch $content $match}}
{{- end -}}
{{- end -}}

Expand Down