aboutsummaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2022-11-19 12:08:06 +0100
committerGitHub <noreply@github.com>2022-11-19 13:08:06 +0200
commiteec1c718806797b21ba5f6c1ceddf711e9d4801a (patch)
tree646d71d535db4b00a09916b1d321e01536799f6f /routers
parent044c754ea53f5b81f451451df53aea366f6f700a (diff)
downloadgitea-eec1c718806797b21ba5f6c1ceddf711e9d4801a.tar.gz
gitea-eec1c718806797b21ba5f6c1ceddf711e9d4801a.zip
Show syntax lexer name in file view/blame (#21814)
Show which Chroma Lexer is used to highlight the file in the file header. It's useful for development to see what was detected, and I think it's not bad info to have for the user: <img width="233" alt="Screenshot 2022-11-14 at 22 31 16" src="https://user-images.githubusercontent.com/115237/201770854-44933dfc-70a4-487c-8457-1bb3cc43ea62.png"> <img width="226" alt="Screenshot 2022-11-14 at 22 36 06" src="https://user-images.githubusercontent.com/115237/201770856-9260ce6f-6c0f-442c-92b5-201e5b113188.png"> <img width="194" alt="Screenshot 2022-11-14 at 22 36 26" src="https://user-images.githubusercontent.com/115237/201770857-6f56591b-80ea-42cc-8ea5-21b9156c018b.png"> Also, I improved the way this header overflows on small screens: <img width="354" alt="Screenshot 2022-11-14 at 22 44 36" src="https://user-images.githubusercontent.com/115237/201774828-2ddbcde1-da15-403f-bf7a-6248449fa2c5.png"> Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: John Olheiser <john.olheiser@gmail.com>
Diffstat (limited to 'routers')
-rw-r--r--routers/web/repo/blame.go13
-rw-r--r--routers/web/repo/view.go3
2 files changed, 14 insertions, 2 deletions
diff --git a/routers/web/repo/blame.go b/routers/web/repo/blame.go
index 64a6f0ec53..52d5c3c6e6 100644
--- a/routers/web/repo/blame.go
+++ b/routers/web/repo/blame.go
@@ -100,6 +100,8 @@ func RefBlame(ctx *context.Context) {
ctx.Data["FileName"] = blob.Name()
ctx.Data["NumLines"], err = blob.GetBlobLineCount()
+ ctx.Data["NumLinesSet"] = true
+
if err != nil {
ctx.NotFound("GetBlobLineCount", err)
return
@@ -237,6 +239,8 @@ func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames m
rows := make([]*blameRow, 0)
escapeStatus := &charset.EscapeStatus{}
+ var lexerName string
+
i := 0
commitCnt := 0
for _, part := range blameParts {
@@ -278,7 +282,13 @@ func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames m
line += "\n"
}
fileName := fmt.Sprintf("%v", ctx.Data["FileName"])
- line = highlight.Code(fileName, language, line)
+ line, lexerNameForLine := highlight.Code(fileName, language, line)
+
+ // set lexer name to the first detected lexer. this is certainly suboptimal and
+ // we should instead highlight the whole file at once
+ if lexerName == "" {
+ lexerName = lexerNameForLine
+ }
br.EscapeStatus, line = charset.EscapeControlHTML(line, ctx.Locale)
br.Code = gotemplate.HTML(line)
@@ -290,4 +300,5 @@ func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames m
ctx.Data["EscapeStatus"] = escapeStatus
ctx.Data["BlameRows"] = rows
ctx.Data["CommitCnt"] = commitCnt
+ ctx.Data["LexerName"] = lexerName
}
diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go
index e7aca04819..7500dbb34b 100644
--- a/routers/web/repo/view.go
+++ b/routers/web/repo/view.go
@@ -568,7 +568,8 @@ func renderFile(ctx *context.Context, entry *git.TreeEntry, treeLink, rawLink st
language = ""
}
}
- fileContent, err := highlight.File(blob.Name(), language, buf)
+ fileContent, lexerName, err := highlight.File(blob.Name(), language, buf)
+ ctx.Data["LexerName"] = lexerName
if err != nil {
log.Error("highlight.File failed, fallback to plain text: %v", err)
fileContent = highlight.PlainText(buf)