aboutsummaryrefslogtreecommitdiff
path: root/lua/lexers/json.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/lexers/json.lua')
-rw-r--r--lua/lexers/json.lua26
1 files changed, 7 insertions, 19 deletions
diff --git a/lua/lexers/json.lua b/lua/lexers/json.lua
index 10b6406..9879053 100644
--- a/lua/lexers/json.lua
+++ b/lua/lexers/json.lua
@@ -1,40 +1,28 @@
--- Copyright 2006-2022 Brian "Sir Alaran" Schott. See LICENSE.
+-- Copyright 2006-2024 Brian "Sir Alaran" Schott. See LICENSE.
-- JSON LPeg lexer.
-- Based off of lexer code by Mitchell.
-local lexer = require('lexer')
-local token, word_match = lexer.token, lexer.word_match
+local lexer = lexer
local P, S = lpeg.P, lpeg.S
-local lex = lexer.new('json')
-
--- Whitespace.
-lex:add_rule('whitespace', token(lexer.WHITESPACE, lexer.space^1))
+local lex = lexer.new(...)
-- Strings.
local sq_str = lexer.range("'", true)
local dq_str = lexer.range('"', true)
-lex:add_rule('string', token(lexer.STRING, sq_str + dq_str))
+lex:add_rule('string', lex:tag(lexer.STRING, sq_str + dq_str))
-- Keywords.
-lex:add_rule('keyword', token(lexer.KEYWORD, word_match('true false null')))
-
--- Comments.
-local line_comment = lexer.to_eol('//', true)
-local block_comment = lexer.range('/*', '*/')
-lex:add_rule('comment', token(lexer.COMMENT, line_comment + block_comment))
+lex:add_rule('keyword', lex:tag(lexer.KEYWORD, lexer.word_match('true false null')))
-- Numbers.
-local integer = S('+-')^-1 * lexer.dec_num * S('Ll')^-1
-lex:add_rule('number', token(lexer.NUMBER, lexer.float + integer))
+lex:add_rule('number', lex:tag(lexer.NUMBER, lexer.number))
-- Operators.
-lex:add_rule('operator', token(lexer.OPERATOR, S('[]{}:,')))
+lex:add_rule('operator', lex:tag(lexer.OPERATOR, S('[]{}:,')))
-- Fold points.
lex:add_fold_point(lexer.OPERATOR, '[', ']')
lex:add_fold_point(lexer.OPERATOR, '{', '}')
-lex:add_fold_point(lexer.COMMENT, '/*', '*/')
-lex:add_fold_point(lexer.COMMENT, lexer.fold_consecutive_lines('//'))
return lex