Documentation
¶
Overview ¶
Package config implements centralized configuration management for GoDoctor. It defines typed schemas, provides built-in defaults, discovers and loads .godoctor.yaml files hierarchically, and performs schema validation.
Index ¶
- Constants
- func FindConfigFile(startDir string) string
- type AutofixConfig
- type BuildConfig
- type CLIConfig
- type Config
- func (c *Config) GetLinterConfigPath(workspaceDir string) string
- func (c *Config) GetSeleneDBPath(workspaceDir string) string
- func (c *Config) GetSeleneWorkers() int
- func (c *Config) GetTestQueryDBPath(workspaceDir string) string
- func (c *Config) GetTool(name string) ToolSpec
- func (c *Config) IsFeatureEnabled(featureName string) bool
- func (c *Config) IsSeleneTestQueryCompat() bool
- func (c *Config) LookupTool(name string) (ToolSpec, bool)
- func (c *Config) Validate() error
- type DiagnosticsConfig
- type DocsConfig
- type EditConfig
- type FeaturesConfig
- type InstructionsConfig
- type MatchingConfig
- type SafeShellConfig
- type ServerConfig
- type ServerHTTPConfig
- type ServerLoggingConfig
- type TestConfig
- type TestQueryConfig
- type ToolSpec
- type ToolsConfig
Constants ¶
const ( ToolGolangCILint = "golangci-lint" ToolModernize = "modernize" ToolDeadcode = "deadcode" ToolSelene = "selene" ToolTestQuery = "testquery" VersionLatest = "latest" DefaultTestQueryDB = ".godoctor/testquery.db" DefaultWildcardPackages = "./..." DefaultTestLevel = "basic" DefaultOutputText = "text" DefaultFormatMarkdown = "markdown" DefaultFormatTable = "table" DefaultFormatJSON = "json" DefaultListenAddr = ":8080" AutofixTidy = "tidy" ToolVet = "vet" ToolMutation = "mutation" ToolStrict = "strict" ToolGolangCILintKey = "golangci_lint" )
Tool binary names and default constants
Variables ¶
This section is empty.
Functions ¶
func FindConfigFile ¶ added in v0.34.0
FindConfigFile searches for a GoDoctor configuration file in the following order: 1. startDir and its ancestor hierarchy until a project boundary (.git or go.mod) or root is reached. 2. User home directory (~/.godoctor.yaml, ~/.godoctor.yml, ~/.config/godoctor/config.yaml). Returns empty string if no config file is found.
Types ¶
type AutofixConfig ¶ added in v0.34.0
type AutofixConfig struct {
Enabled bool `mapstructure:"enabled" yaml:"enabled" json:"enabled"`
DryRun bool `mapstructure:"dry_run" yaml:"dry_run" json:"dry_run"`
Order []string `mapstructure:"order,omitempty" yaml:"order,omitempty"`
ModTidy bool `mapstructure:"mod_tidy,omitempty" yaml:"mod_tidy,omitempty"`
Modernize bool `mapstructure:"modernize,omitempty" yaml:"modernize,omitempty"`
Gofmt bool `mapstructure:"gofmt,omitempty" yaml:"gofmt,omitempty"`
Deadcode bool `mapstructure:"deadcode,omitempty" yaml:"deadcode,omitempty"`
}
AutofixConfig configures automated remediation phases.
type BuildConfig ¶ added in v0.34.0
type BuildConfig struct {
DefaultPackages string `mapstructure:"default_packages" yaml:"default_packages"`
Output string `mapstructure:"output,omitempty" yaml:"output,omitempty"`
Tags []string `mapstructure:"tags,omitempty" yaml:"tags,omitempty"`
Race bool `mapstructure:"race" yaml:"race" json:"race"`
Trimpath bool `mapstructure:"trimpath" yaml:"trimpath" json:"trimpath"`
Timeout time.Duration `mapstructure:"timeout" yaml:"timeout" json:"timeout"`
Flags []string `mapstructure:"flags,omitempty" yaml:"flags,omitempty"`
AutoTidy bool `mapstructure:"auto_tidy,omitempty" yaml:"auto_tidy,omitempty"`
AutoFormat bool `mapstructure:"auto_format,omitempty" yaml:"auto_format,omitempty"`
AutoModernize bool `mapstructure:"auto_modernize,omitempty" yaml:"auto_modernize,omitempty"`
RunLinter bool `mapstructure:"run_linter,omitempty" yaml:"run_linter,omitempty"`
RunDeadcode bool `mapstructure:"run_deadcode,omitempty" yaml:"run_deadcode,omitempty"`
RunTests bool `mapstructure:"run_tests,omitempty" yaml:"run_tests,omitempty"`
}
BuildConfig configures the smart_build pipeline.
type CLIConfig ¶ added in v0.34.0
type CLIConfig struct {
Timeout time.Duration `mapstructure:"timeout" yaml:"timeout" json:"timeout"`
OutputFormat string `mapstructure:"output_format" yaml:"output_format" json:"output_format"`
Color bool `mapstructure:"color" yaml:"color" json:"color"`
LogLevel string `mapstructure:"log_level" yaml:"log_level" json:"log_level"`
DefaultOutput string `mapstructure:"default_output,omitempty" yaml:"default_output,omitempty"`
Quiet bool `mapstructure:"quiet,omitempty" yaml:"quiet,omitempty"`
}
CLIConfig holds CLI-specific configuration settings.
type Config ¶
type Config struct {
Version string `mapstructure:"version" yaml:"version" json:"version"`
CLI CLIConfig `mapstructure:"cli" yaml:"cli" json:"cli"`
Server ServerConfig `mapstructure:"server" yaml:"server" json:"server"`
SafeShell SafeShellConfig `mapstructure:"safeshell" yaml:"safeshell" json:"safeshell"`
Instructions InstructionsConfig `mapstructure:"instructions" yaml:"instructions" json:"instructions"`
Tools ToolsConfig `mapstructure:"tools" yaml:"tools" json:"tools"`
Features FeaturesConfig `mapstructure:"features" yaml:"features" json:"features"`
Build BuildConfig `mapstructure:"build" yaml:"build" json:"build"`
Autofix AutofixConfig `mapstructure:"autofix" yaml:"autofix" json:"autofix"`
Edit EditConfig `mapstructure:"edit" yaml:"edit" json:"edit"`
Matching MatchingConfig `mapstructure:"matching" yaml:"matching" json:"matching"`
Diagnostics DiagnosticsConfig `mapstructure:"diagnostics" yaml:"diagnostics" json:"diagnostics"`
Test TestConfig `mapstructure:"test" yaml:"test" json:"test"`
TestQuery TestQueryConfig `mapstructure:"testquery" yaml:"testquery" json:"testquery"`
Docs DocsConfig `mapstructure:"docs" yaml:"docs" json:"docs"`
LoadedFrom string `mapstructure:"-" yaml:"-" json:"-"`
}
Config represents the master configuration schema for GoDoctor.
func Load ¶
Load reads and parses a configuration file from the given path. If configFile is empty, it returns the default configuration.
func LoadFromWorkspace ¶ added in v0.34.0
LoadFromWorkspace discovers and loads a configuration file for the given workspace directory. If no configuration file is found, it returns the default configuration without error.
func NewDefaultConfig ¶ added in v0.34.0
func NewDefaultConfig() *Config
NewDefaultConfig returns a fully populated Config struct with built-in production defaults matching RFC-0001.
func (*Config) GetLinterConfigPath ¶ added in v0.34.0
GetLinterConfigPath returns the resolved .golangci configuration file path for the workspace.
func (*Config) GetSeleneDBPath ¶ added in v0.34.0
GetSeleneDBPath returns the resolved database path for Selene testquery integration.
func (*Config) GetSeleneWorkers ¶ added in v0.34.0
GetSeleneWorkers returns the configured workers or runtime.GOMAXPROCS(0) if 0 or negative.
func (*Config) GetTestQueryDBPath ¶ added in v0.34.0
GetTestQueryDBPath returns the resolved database path for testquery.db in the workspace.
func (*Config) GetTool ¶ added in v0.34.0
GetTool returns the ToolSpec for a given tool name or alias (case-insensitive). If the tool is not found, an empty ToolSpec is returned.
func (*Config) IsFeatureEnabled ¶ added in v0.34.0
IsFeatureEnabled queries whether a given feature flag is active.
func (*Config) IsSeleneTestQueryCompat ¶ added in v0.34.0
IsSeleneTestQueryCompat returns whether testquery compatibility mode is enabled for Selene.
func (*Config) LookupTool ¶ added in v0.34.0
LookupTool returns the ToolSpec and a boolean indicating if the tool was found.
type DiagnosticsConfig ¶ added in v0.34.0
type DiagnosticsConfig struct {
CollectOnEdit bool `mapstructure:"collect_on_edit" yaml:"collect_on_edit"`
VerificationScope string `mapstructure:"verification_scope" yaml:"verification_scope"`
CheckCommand []string `mapstructure:"check_command" yaml:"check_command"`
Timeout time.Duration `mapstructure:"timeout" yaml:"timeout" json:"timeout"`
EnableSuggestions bool `mapstructure:"enable_suggestions" yaml:"enable_suggestions"`
LevenshteinSuggestions bool `mapstructure:"levenshtein_suggestions" yaml:"levenshtein_suggestions"`
MaxLevenshteinDistance int `mapstructure:"max_levenshtein_distance" yaml:"max_levenshtein_distance"`
MaxDistance int `mapstructure:"max_distance,omitempty" yaml:"max_distance,omitempty"`
MaxSuggestions int `mapstructure:"max_suggestions" yaml:"max_suggestions"`
SuggestionsLimit int `mapstructure:"suggestions_limit,omitempty" yaml:"suggestions_limit,omitempty"`
SnippetContextLines int `mapstructure:"snippet_context_lines" yaml:"snippet_context_lines"`
}
DiagnosticsConfig configures error diagnosis and Levenshtein suggestion behavior.
type DocsConfig ¶ added in v0.34.0
type DocsConfig struct {
CacheEnabled bool `mapstructure:"cache_enabled" yaml:"cache_enabled"`
CacheTTL time.Duration `mapstructure:"cache_ttl" yaml:"cache_ttl"`
CacheMaxEntries int `mapstructure:"cache_max_entries" yaml:"cache_max_entries"`
ExternalFetch bool `mapstructure:"external_fetch" yaml:"external_fetch"`
OfflineMode bool `mapstructure:"offline_mode" yaml:"offline_mode"`
PkgGoDevURL string `mapstructure:"pkg_go_dev_url" yaml:"pkg_go_dev_url"`
MaxSymbolsRendered int `mapstructure:"max_symbols_rendered" yaml:"max_symbols_rendered"`
FuzzySuggestions bool `mapstructure:"fuzzy_suggestions" yaml:"fuzzy_suggestions"`
MaxFuzzySuggestions int `mapstructure:"max_fuzzy_suggestions" yaml:"max_fuzzy_suggestions"`
FuzzyDistanceThreshold int `mapstructure:"fuzzy_distance_threshold" yaml:"fuzzy_distance_threshold"`
DefaultFormat string `mapstructure:"default_format" yaml:"default_format"`
TempDir string `mapstructure:"temp_dir,omitempty" yaml:"temp_dir,omitempty"`
}
DocsConfig configures read_docs AST documentation extraction.
type EditConfig ¶ added in v0.34.0
type EditConfig struct {
BackupStrategy string `mapstructure:"backup_strategy" yaml:"backup_strategy"`
AtomicWrite bool `mapstructure:"atomic_write" yaml:"atomic_write"`
PreservePermissions bool `mapstructure:"preserve_permissions" yaml:"preserve_permissions"`
DefaultThreshold float64 `mapstructure:"default_threshold" yaml:"default_threshold"`
FuzzyThreshold float64 `mapstructure:"fuzzy_threshold,omitempty" yaml:"fuzzy_threshold,omitempty"`
FormatOnSave string `mapstructure:"format_on_save" yaml:"format_on_save"`
ExcludePaths []string `mapstructure:"exclude_paths" yaml:"exclude_paths"`
ExcludeDirs []string `mapstructure:"exclude_dirs,omitempty" yaml:"exclude_dirs,omitempty"`
MaxLevenshteinDistance int `mapstructure:"max_levenshtein_distance" yaml:"max_levenshtein_distance"`
CompilerGate string `mapstructure:"compiler_gate" yaml:"compiler_gate"`
Timeout time.Duration `mapstructure:"timeout" yaml:"timeout" json:"timeout"`
}
EditConfig configures smart_edit coordinate editing.
type FeaturesConfig ¶ added in v0.34.0
type FeaturesConfig struct {
Autofix bool `mapstructure:"autofix" yaml:"autofix"`
ModTidy bool `mapstructure:"mod_tidy" yaml:"mod_tidy"`
ModernizeCheck bool `mapstructure:"modernize_check" yaml:"modernize_check"`
DeadcodeCheck bool `mapstructure:"deadcode_check" yaml:"deadcode_check"`
FormatOnBuild bool `mapstructure:"format_on_build" yaml:"format_on_build"`
FormatOnEdit bool `mapstructure:"format_on_edit" yaml:"format_on_edit"`
VetGate bool `mapstructure:"vet_gate" yaml:"vet_gate"`
AutoRollback bool `mapstructure:"auto_rollback" yaml:"auto_rollback"`
TestQuerySync bool `mapstructure:"testquery_sync" yaml:"testquery_sync"`
TestQueryCompat bool `mapstructure:"testquery_compat,omitempty" yaml:"testquery_compat,omitempty"`
VersionCheckHints bool `mapstructure:"version_check_hints" yaml:"version_check_hints"`
CoverageGate bool `mapstructure:"coverage_gate" yaml:"coverage_gate"`
RaceDetector bool `mapstructure:"race_detector" yaml:"race_detector"`
StrictMode bool `mapstructure:"strict_mode" yaml:"strict_mode"`
RemoteDocFetch bool `mapstructure:"remote_doc_fetch" yaml:"remote_doc_fetch"`
VanityResolution bool `mapstructure:"vanity_resolution" yaml:"vanity_resolution"`
DocsCache bool `mapstructure:"docs_cache" yaml:"docs_cache"`
LevenshteinSuggestions bool `mapstructure:"levenshtein_suggestions,omitempty" yaml:"levenshtein_suggestions,omitempty"`
MutationTesting bool `mapstructure:"mutation_testing,omitempty" yaml:"mutation_testing,omitempty"`
}
FeaturesConfig holds global feature toggles.
type InstructionsConfig ¶ added in v0.34.0
type InstructionsConfig struct {
Enabled bool `mapstructure:"enabled" yaml:"enabled" json:"enabled"`
Compact bool `mapstructure:"compact" yaml:"compact" json:"compact"`
DynamicTools bool `mapstructure:"dynamic_tools" yaml:"dynamic_tools"`
RulesFile string `mapstructure:"rules_file,omitempty" yaml:"rules_file,omitempty"`
CustomRules string `mapstructure:"custom_rules,omitempty" yaml:"custom_rules,omitempty"`
CustomPromptPath string `mapstructure:"custom_prompt_path,omitempty" yaml:"custom_prompt_path,omitempty"`
ExtraGuidance string `mapstructure:"extra_guidance,omitempty" yaml:"extra_guidance,omitempty"`
}
InstructionsConfig configures dynamic agent instructions and prompts.
type MatchingConfig ¶ added in v0.34.0
type MatchingConfig struct {
FuzzyFallback bool `mapstructure:"fuzzy_fallback" yaml:"fuzzy_fallback"`
SimilarityThreshold float64 `mapstructure:"similarity_threshold" yaml:"similarity_threshold"`
DefaultThreshold float64 `mapstructure:"default_threshold,omitempty" yaml:"default_threshold,omitempty"`
NormalizeUnicode bool `mapstructure:"normalize_unicode" yaml:"normalize_unicode"`
MinSeedLength int `mapstructure:"min_seed_length" yaml:"min_seed_length"`
WindowExpansionDelta int `mapstructure:"window_expansion_delta" yaml:"window_expansion_delta"`
MaxWindowLines int `mapstructure:"max_window_lines" yaml:"max_window_lines"`
}
MatchingConfig configures AST/fuzzy text matching parameters in smart_edit.
type SafeShellConfig ¶ added in v0.34.0
type SafeShellConfig struct {
Mode string `mapstructure:"mode" yaml:"mode" json:"mode"`
CommandTimeout time.Duration `mapstructure:"command_timeout" yaml:"command_timeout"`
DefaultTimeout time.Duration `mapstructure:"default_timeout,omitempty" yaml:"default_timeout,omitempty"`
AllowedBinaries []string `mapstructure:"allowed_binaries" yaml:"allowed_binaries"`
MaxOutputBytes int64 `mapstructure:"max_output_bytes" yaml:"max_output_bytes"`
}
SafeShellConfig configures safe shell execution parameters.
type ServerConfig ¶ added in v0.34.0
type ServerConfig struct {
Name string `mapstructure:"name" yaml:"name" json:"name"`
Transport string `mapstructure:"transport" yaml:"transport" json:"transport"`
HTTP ServerHTTPConfig `mapstructure:"http" yaml:"http" json:"http"`
Logging ServerLoggingConfig `mapstructure:"logging" yaml:"logging" json:"logging"`
ListenAddr string `mapstructure:"listen_addr,omitempty" yaml:"listen_addr,omitempty"`
ReadTimeout time.Duration `mapstructure:"read_timeout,omitempty" yaml:"read_timeout,omitempty"`
WriteTimeout time.Duration `mapstructure:"write_timeout,omitempty" yaml:"write_timeout,omitempty"`
IdleTimeout time.Duration `mapstructure:"idle_timeout,omitempty" yaml:"idle_timeout,omitempty"`
ShutdownTimeout time.Duration `mapstructure:"shutdown_timeout,omitempty" yaml:"shutdown_timeout,omitempty"`
AllowedOrigins []string `mapstructure:"allowed_origins,omitempty" yaml:"allowed_origins,omitempty"`
}
ServerConfig configures the MCP server and StreamableHTTP endpoints.
type ServerHTTPConfig ¶ added in v0.34.0
type ServerHTTPConfig struct {
Listen string `mapstructure:"listen" yaml:"listen" json:"listen"`
ListenAddr string `mapstructure:"listen_addr,omitempty" yaml:"listen_addr,omitempty"`
ReadTimeout time.Duration `mapstructure:"read_timeout" yaml:"read_timeout" json:"read_timeout"`
WriteTimeout time.Duration `mapstructure:"write_timeout" yaml:"write_timeout" json:"write_timeout"`
IdleTimeout time.Duration `mapstructure:"idle_timeout" yaml:"idle_timeout" json:"idle_timeout"`
ShutdownTimeout time.Duration `mapstructure:"shutdown_timeout" yaml:"shutdown_timeout"`
AllowedOrigins []string `mapstructure:"allowed_origins" yaml:"allowed_origins"`
AllowCredentials bool `mapstructure:"allow_credentials" yaml:"allow_credentials"`
}
ServerHTTPConfig configures HTTP-specific server options.
type ServerLoggingConfig ¶ added in v0.34.0
type ServerLoggingConfig struct {
Level string `mapstructure:"level" yaml:"level" json:"level"`
Format string `mapstructure:"format" yaml:"format" json:"format"`
TraceMCPPayloads bool `mapstructure:"trace_mcp_payloads" yaml:"trace_mcp_payloads"`
LogFile string `mapstructure:"log_file,omitempty" yaml:"log_file,omitempty"`
}
ServerLoggingConfig configures logging options for the server.
type TestConfig ¶ added in v0.34.0
type TestConfig struct {
DefaultLevel string `mapstructure:"default_level" yaml:"default_level"`
DefaultPackages string `mapstructure:"default_packages" yaml:"default_packages"`
Timeout time.Duration `mapstructure:"timeout" yaml:"timeout" json:"timeout"`
Verbose bool `mapstructure:"verbose" yaml:"verbose" json:"verbose"`
RaceDetector bool `mapstructure:"race_detector" yaml:"race_detector"`
CoverageThreshold float64 `mapstructure:"coverage_threshold" yaml:"coverage_threshold"`
CoverageProfile string `mapstructure:"coverage_profile" yaml:"coverage_profile"`
CoverageOutputDir string `mapstructure:"coverage_output_dir,omitempty" yaml:"coverage_output_dir,omitempty"`
BenchmarkPattern string `mapstructure:"benchmark_pattern" yaml:"benchmark_pattern"`
BenchmarkFlags []string `mapstructure:"benchmark_flags,omitempty" yaml:"benchmark_flags,omitempty"`
BenchmarkMem bool `mapstructure:"benchmark_mem" yaml:"benchmark_mem"`
}
TestConfig configures the smart_test runner.
type TestQueryConfig ¶ added in v0.34.0
type TestQueryConfig struct {
DatabasePath string `mapstructure:"db_path" yaml:"db_path" json:"db_path"`
WALMode bool `mapstructure:"wal_mode" yaml:"wal_mode" json:"wal_mode"`
BusyTimeout time.Duration `mapstructure:"busy_timeout" yaml:"busy_timeout" json:"busy_timeout"`
Format string `mapstructure:"format" yaml:"format" json:"format"`
}
TestQueryConfig configures SQL analytics against testquery.db.
type ToolSpec ¶ added in v0.34.0
type ToolSpec struct {
BinaryName string `mapstructure:"binary_name" yaml:"binary_name"`
Command string `mapstructure:"command,omitempty" yaml:"command,omitempty"`
RecommendedVersion string `mapstructure:"recommended_version" yaml:"recommended_version"`
MinVersion string `mapstructure:"min_version,omitempty" yaml:"min_version,omitempty"`
Pkg string `mapstructure:"pkg,omitempty" yaml:"pkg,omitempty"`
Package string `mapstructure:"package,omitempty" yaml:"package,omitempty"`
Config string `mapstructure:"config,omitempty" yaml:"config,omitempty"`
Packages string `mapstructure:"packages,omitempty" yaml:"packages,omitempty"`
DbPath string `mapstructure:"db_path,omitempty" yaml:"db_path,omitempty"`
Format string `mapstructure:"format,omitempty" yaml:"format,omitempty"`
Timeout time.Duration `mapstructure:"timeout" yaml:"timeout"`
Args []string `mapstructure:"args,omitempty" yaml:"args,omitempty"`
Disabled bool `mapstructure:"disabled" yaml:"disabled"`
Workers int `mapstructure:"workers,omitempty" yaml:"workers,omitempty"`
TestQueryCompat bool `mapstructure:"testquery_compat,omitempty" yaml:"testquery_compat,omitempty"`
}
ToolSpec defines execution parameters and version tracking for an external binary/package.
type ToolsConfig ¶ added in v0.34.0
type ToolsConfig struct {
GolangCILint ToolSpec `mapstructure:"golangci_lint" yaml:"golangci_lint"`
Modernize ToolSpec `mapstructure:"modernize" yaml:"modernize"`
Deadcode ToolSpec `mapstructure:"deadcode" yaml:"deadcode"`
Selene ToolSpec `mapstructure:"selene" yaml:"selene"`
TestQuery ToolSpec `mapstructure:"testquery" yaml:"testquery"`
}
ToolsConfig catalogs external tool specs.