mirror of
https://github.com/go-gitea/gitea
synced 2025-07-09 12:07:20 +00:00
Add .gitattribute assisted language detection to blame, diff and render (#17590)
Use check attribute code to check the assigned language of a file and send that in to chroma as a hint for the language of the file. Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
@ -55,7 +55,7 @@ func NewContext() {
|
||||
}
|
||||
|
||||
// Code returns a HTML version of code string with chroma syntax highlighting classes
|
||||
func Code(fileName, code string) string {
|
||||
func Code(fileName, language, code string) string {
|
||||
NewContext()
|
||||
|
||||
// diff view newline will be passed as empty, change to literal \n so it can be copied
|
||||
@ -69,9 +69,23 @@ func Code(fileName, code string) string {
|
||||
}
|
||||
|
||||
var lexer chroma.Lexer
|
||||
if val, ok := highlightMapping[filepath.Ext(fileName)]; ok {
|
||||
//use mapped value to find lexer
|
||||
lexer = lexers.Get(val)
|
||||
|
||||
if len(language) > 0 {
|
||||
lexer = lexers.Get(language)
|
||||
|
||||
if lexer == nil {
|
||||
// Attempt stripping off the '?'
|
||||
if idx := strings.IndexByte(language, '?'); idx > 0 {
|
||||
lexer = lexers.Get(language[:idx])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if lexer == nil {
|
||||
if val, ok := highlightMapping[filepath.Ext(fileName)]; ok {
|
||||
//use mapped value to find lexer
|
||||
lexer = lexers.Get(val)
|
||||
}
|
||||
}
|
||||
|
||||
if lexer == nil {
|
||||
@ -119,7 +133,7 @@ func CodeFromLexer(lexer chroma.Lexer, code string) string {
|
||||
}
|
||||
|
||||
// File returns a slice of chroma syntax highlighted lines of code
|
||||
func File(numLines int, fileName string, code []byte) []string {
|
||||
func File(numLines int, fileName, language string, code []byte) []string {
|
||||
NewContext()
|
||||
|
||||
if len(code) > sizeLimit {
|
||||
@ -139,8 +153,16 @@ func File(numLines int, fileName string, code []byte) []string {
|
||||
htmlw := bufio.NewWriter(&htmlbuf)
|
||||
|
||||
var lexer chroma.Lexer
|
||||
if val, ok := highlightMapping[filepath.Ext(fileName)]; ok {
|
||||
lexer = lexers.Get(val)
|
||||
|
||||
// provided language overrides everything
|
||||
if len(language) > 0 {
|
||||
lexer = lexers.Get(language)
|
||||
}
|
||||
|
||||
if lexer == nil {
|
||||
if val, ok := highlightMapping[filepath.Ext(fileName)]; ok {
|
||||
lexer = lexers.Get(val)
|
||||
}
|
||||
}
|
||||
|
||||
if lexer == nil {
|
||||
|
Reference in New Issue
Block a user