From 09953ff50f9461d1da5653556974e5e3f2880e18 Mon Sep 17 00:00:00 2001
From: Alec Thomas <alec@swapoff.org>
Date: Mon, 13 Nov 2023 07:56:30 +1100
Subject: [PATCH] fix: attempt to load lexer files before using Get()

File loading runs after Get(), but Get() always succeeds so it would
never load a file.
---
 cmd/chroma/main.go | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/cmd/chroma/main.go b/cmd/chroma/main.go
index ce71b2102..29b84f81b 100644
--- a/cmd/chroma/main.go
+++ b/cmd/chroma/main.go
@@ -366,11 +366,19 @@ func selexer(path, contents string) (lexer chroma.Lexer, err error) {
 		return lexers.Analyse(contents), nil
 	}
 
-	if lexer := lexers.Get(cli.Lexer); lexer != nil {
-		return lexer, nil
+	if _, err := os.Stat(cli.Lexer); err == nil {
+		cwd, err := os.Getwd()
+		if err != nil {
+			return nil, err
+		}
+		path, err := filepath.Rel(cwd, cli.Lexer)
+		if err != nil {
+			return nil, err
+		}
+		return chroma.NewXMLLexer(os.DirFS("."), path)
 	}
-	lexerPath, err := filepath.Abs(cli.Lexer)
-	return chroma.NewXMLLexer(os.DirFS("/"), lexerPath)
+
+	return lexers.Get(cli.Lexer), nil
 }
 
 func format(ctx *kong.Context, w io.Writer, style *chroma.Style, it chroma.Iterator) {