From 4c4392d29df777ff702dfe99b4f3c23142976e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Cepl?= Date: Fri, 11 Aug 2023 01:27:32 +0200 Subject: update lexers to orbitalquark/scintillua@b789dde Rather than cherry pick patches from after 6.2 we will just grab everything as is. --- lua/lexers/makefile.lua | 167 +++++++++++++++++++++++++++++------------------- 1 file changed, 100 insertions(+), 67 deletions(-) (limited to 'lua/lexers/makefile.lua') diff --git a/lua/lexers/makefile.lua b/lua/lexers/makefile.lua index 9c5f332..fd90ba2 100644 --- a/lua/lexers/makefile.lua +++ b/lua/lexers/makefile.lua @@ -1,88 +1,121 @@ --- Copyright 2006-2022 Mitchell. See LICENSE. +-- Copyright 2006-2024 Mitchell. See LICENSE. -- Makefile LPeg lexer. -local lexer = require('lexer') -local token, word_match = lexer.token, lexer.word_match -local P, S = lpeg.P, lpeg.S +local lexer = lexer +local P, S, B = lpeg.P, lpeg.S, lpeg.B -local lex = lexer.new('makefile', {lex_by_line = true}) +local lex = lexer.new(..., {lex_by_line = true}) --- Whitespace. -local ws = token(lexer.WHITESPACE, lexer.space^1) -lex:add_rule('whitespace', ws) +-- Function definition. +local word = (lexer.any - lexer.space - S('$:,#=(){}'))^1 +local func_name = lex:tag(lexer.FUNCTION, word) +local ws = lex:get_rule('whitespace') +local eq = lex:tag(lexer.OPERATOR, '=') +lex:add_rule('function_def', + lex:tag(lexer.KEYWORD, lexer.word_match('define')) * ws * func_name * ws^-1 * eq) -- Keywords. -lex:add_rule('keyword', token(lexer.KEYWORD, P('!')^-1 * word_match({ - -- GNU Make conditionals. - 'ifeq', 'ifneq', 'ifdef', 'ifndef', 'else', 'endif', - -- Other conditionals. - 'if', 'elseif', 'elseifdef', 'elseifndef', - -- Directives and other keywords. - 'define', 'endef', 'export', 'include', 'override', 'private', 'undefine', 'unexport', 'vpath' -}, true))) +lex:add_rule('keyword', lex:tag(lexer.KEYWORD, P('!')^-1 * lex:word_match(lexer.KEYWORD, true))) -- Targets. -local special_target = token(lexer.CONSTANT, word_match{ - '.PHONY', '.SUFFIXES', '.DEFAULT', '.PRECIOUS', '.INTERMEDIATE', '.SECONDARY', '.SECONDEXPANSION', - '.DELETE_ON_ERROR', '.IGNORE', '.LOW_RESOLUTION_TIME', '.SILENT', '.EXPORT_ALL_VARIABLES', - '.NOTPARALLEL', '.ONESHELL', '.POSIX' -}) -local normal_target = token('target', (lexer.any - lexer.space - S(':#='))^1) -local target_list = normal_target * (ws * normal_target)^0 -lex:add_rule('target', lexer.starts_line((special_target + target_list) * ws^0 * #(':' * -P('=')))) -lex:add_style('target', lexer.styles.label) +local special_target = lex:tag(lexer.CONSTANT_BUILTIN, '.' * lex:word_match('special_targets')) +-- local normal_target = lex:tag('target', (lexer.any - lexer.space - S(':+?!=#'))^1) +local target = special_target -- + normal_target * (ws * normal_target)^0 +lex:add_rule('target', lexer.starts_line(target * ws^-1 * #(':' * lexer.space))) --- Variables. -local word_char = lexer.any - lexer.space - S(':#=(){}') -local assign = S(':+?')^-1 * '=' -local expanded_var = '$' * ('(' * word_char^1 * ')' + '{' * word_char^1 * '}') -local auto_var = '$' * S('@%