jojo/routers/common/search.go

56 lines
1.5 KiB
Go
Raw Normal View History

// Copyright 2025 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package common
import (
code_indexer "forgejo.org/modules/indexer/code"
"forgejo.org/modules/setting"
"forgejo.org/services/context"
)
type CodeSearchOptions struct {
Language, Keyword, Path string
}
// Parses the common code search options from the context
// This functions takes care of the following ctx.Data fields
// - Keyword
// - Language
// - CodeSearchPath
func InitCodeSearchOptions(ctx *context.Context) (opts CodeSearchOptions) {
opts.Language = ctx.FormTrim("l")
opts.Keyword = ctx.FormTrim("q")
opts.Path = ctx.FormTrim("path")
ctx.Data["Keyword"] = opts.Keyword
ctx.Data["Language"] = opts.Language
ctx.Data["CodeSearchPath"] = opts.Path
return opts
}
// Returns the indexer mode to be used by the code indexer
// Also sets the ctx.Data fields "CodeSearchMode" and "CodeSearchOptions"
//
// NOTE:
// This is separate from `InitCodeSearchOptions`
// since this is specific the indexer and only used
// where git-grep is not available.
func CodeSearchIndexerMode(ctx *context.Context) (mode code_indexer.SearchMode) {
mode = code_indexer.SearchModeExact
if m := ctx.FormTrim("mode"); m == "union" {
mode = code_indexer.SearchModeUnion
} else if m == "fuzzy" || ctx.FormBool("fuzzy") {
if setting.Indexer.RepoIndexerEnableFuzzy {
mode = code_indexer.SearchModeFuzzy
} else {
mode = code_indexer.SearchModeUnion
}
}
ctx.Data["CodeSearchOptions"] = code_indexer.CodeSearchOptions
ctx.Data["CodeSearchMode"] = mode.String()
return mode
}