@b4n commented on this pull request.


>       {
-               g_warning("Failed to find lexer for ID %u", lexer_id);
+               g_warning("Failed to find lexer for name %s", lexer_name);

I don't know how expansive it'd be indeed, so whether or not it's reasonable to 
do it, but we could check.
>From a quick look, it'll perform a linear search for the lexer of that name, 
>and call Create() on the module, which either calls the lexer's 
>`LexerFactoryFunction` (calling lexer code, which normally would instantiate 
>an instance of the relevant lexer), or instantiate a new `LexerSimple`. So… it 
>seems to be in between cheap and expansive, but I didn't profile anything.

> 2\. We'd need to iterate through all lexers. Right now all lexers have to be 
> mentioned explicitly at 2 different places in switches in `highlighting.c` 
> and we probably don't want to add one more. So we'd have to create a table 
> containing all the lexers, possibly in a similar way like in `filetypes.c`.

I was wondering whether, now that we use a name for the lexers, if we'd want to 
avoid hard-coding things in highlightingmappings.h and move that to the 
filetypes files à-la-SciTE?  E.g. maybe something like this:

```
[lexer]
# could also be e.g. in [settings] as lexer_name
name = cpp
# style[lexer style number] = style name for use in [styling]
styles[0] = default
styles[1] = comment
styles[2] = commentline
styles[3] = commentdoc
# …
# keywors, those could possibly use GetWordListDescription() or similar to have 
actual names
keywords[0] = primary
keywords[1] = secondary
keywords[2] = docComment
# …
```

or if we were to break compatibility, we could avoid adding a proxy and just 
use the style/keyword numbers directly instead of mapping them twice..

I don't particularly like the idea of having arbitrary numbers there, but in 
the end, is it worse than the internal tables?  And maybe we could use 
`NamedStyles()`/`NameOfStyle()` and `DescribeWordListSets()` if enough lexers 
we need support that.

Anyway, it might not be relevant as we're not loading all filetype files anyway.

But note that any list to check would have to *actually* be synchronized with 
what is used; the issue in #3616 would only be found if checking the ID we 
*used*, not the list of lexers we *had*, as it was missing from the 
`AddLexerModules()` call.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/geany/geany/pull/3668#discussion_r1380806370
You are receiving this because you are subscribed to this thread.

Message ID: <geany/geany/pull/3668/review/[email protected]>

Reply via email to