package engine func selectOptions[T any](source Source, supplied []Options[T]) (Options[T], []Diagnostic) { if len(supplied) > 1 { return Options[T]{}, []Diagnostic{optionDiagnostic(CodeOptionsInvalid, "Load accepts at most one options value")} } var options Options[T] if len(supplied) == 1 { options = supplied[0] } var diagnostics []Diagnostic definition := options.Definition if !validOverlayName(options.Overlay) { diagnostics = append(diagnostics, optionDiagnostic(CodeOptionsInvalid, "overlay name must contain only ASCII letters, digits, underscore, or hyphen")) } if options.Filesystem != nil { diagnostics = append(diagnostics, filesystemOptionDiagnostics(source, options.Filesystem)...) } if source.kind == sourceNone && options.Imports { diagnostics = append(diagnostics, optionDiagnostic(CodeOptionsInvalid, "NoSource cannot enable imports")) } if source.kind == sourceNone && options.Overlay != "" && options.Overlay != "default" { diagnostics = append(diagnostics, optionDiagnostic(CodeOptionsInvalid, "NoSource cannot select an active overlay")) } if options.Filesystem == nil && (source.kind == sourceBytes || source.kind == sourceReader) && (options.Imports || activeOverlay(options.Overlay)) { diagnostics = append(diagnostics, optionDiagnostic(CodeOptionsInvalid, "byte and reader imports or overlays require filesystem context")) } if definition.Version != nil { if !definition.Version.Path.valid() { diagnostics = append(diagnostics, optionDiagnostic(CodeOptionsInvalid, "schema-version path is invalid")) } if definition.Version.Check == nil { diagnostics = append(diagnostics, optionDiagnostic(CodeOptionsInvalid, "schema-version rule requires a checker")) } } return options, canonicalDiagnostics(diagnostics) } func optionDiagnostic(code Code, message string) Diagnostic { return Diagnostic{Code: code, Severity: SeverityError, Message: message} }