A comment in bash is defined as "[...] a word beginning with # causes
that word and all remaining characters on that line to be ignored".
A word is defined as "a sequence of characters considered as a single
unit by the shell"; and there is a set of metacharacters defined as
"a character that, when unquoted, separates words. One of the
following: | & ; ( ) < > space tab".
In practice, "foo#bar" is one single word, not "foo" followed by a
comment. Trickier, "foo\;#bar" is also a single word, but "foo;bar"
are 2 words and a control character.
So, fix the Bash lexer to check whether the character preceding the
hash sign to be either a metacharacter or part of a word.
A maybe better fix would be to understand the Bash conception of a
word, and analyze those, but it would require a large rewrite.