diff --git a/lexers/r/raku.go b/lexers/r/raku.go index 88d1f2367..0981bb1e5 100644 --- a/lexers/r/raku.go +++ b/lexers/r/raku.go @@ -49,8 +49,10 @@ func rakuRules() Rules { const ( colonPairOpeningBrackets = `(?:<<|<|ยซ|\(|\[|\{)` colonPairClosingBrackets = `(?:>>|>|ยป|\)|\]|\})` - colonPairPattern = `(?:)(?\w[\w'-]*)(?` + colonPairOpeningBrackets + `)` - namePattern = `((?:(?!` + colonPairPattern + `)[\w':-])+)` + colonPairPattern = `(?:)(?\w[\w'-]*)(?` + colonPairOpeningBrackets + `)` + colonPairLookahead = `(?=(:['\w-]+` + + colonPairOpeningBrackets + `.+?` + colonPairClosingBrackets + `)?` + namePattern = `((?:(?!` + colonPairPattern + `)(?:::|[\w':-]))+)` variablePattern = `[$@%&]+[.^:?=!~]?` + namePattern globalVariablePattern = `[$@%&]+\*` + namePattern ) @@ -601,18 +603,10 @@ func rakuRules() Rules { Include("colon-pair"), // Token { - // Token with adverbs - `(?<=(?:^|\s)(?:regex|token|rule)(\s+))(['\w:-]+)(?=:['\w-]+` + - colonPairOpeningBrackets + `.+?` + colonPairClosingBrackets + `\s*[({])`, + `(?<=(?:^|\s)(?:regex|token|rule)(\s+))` + namePattern + colonPairLookahead + `\s*[({])`, NameFunction, Push("token", "name-adverb"), }, - { - // Token without adverbs - `(?<=(?:^|\s)(?:regex|token|rule)(?:\s+))(['\w:-]+)`, - NameFunction, - Push("token"), - }, // Substitution {`(?<=^|\b|\s)(? 0) {} multi sub fib (1 --> 1) {} diff --git a/lexers/testdata/raku.expected b/lexers/testdata/raku.expected index 4ae4b69b4..6cc1e95dc 100644 --- a/lexers/testdata/raku.expected +++ b/lexers/testdata/raku.expected @@ -102,6 +102,11 @@ {"type":"LiteralNumberInteger","value":"3"}, {"type":"Punctuation","value":");"}, {"type":"Text","value":"\n\n"}, + {"type":"NameFunction","value":"Module::function"}, + {"type":"Punctuation","value":"("}, + {"type":"NameVariable","value":"$var"}, + {"type":"Punctuation","value":");"}, + {"type":"Text","value":"\n\n"}, {"type":"Keyword","value":"#| "}, {"type":"LiteralStringDoc","value":"Fibonacci with Multiple dispatch\n"}, {"type":"Keyword","value":"multi"},