vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

git-rebase.lua

(797B)


      1 -- Copyright 2017-2025 Marc André Tanner. See LICENSE.
      2 -- git-rebase(1) LPeg lexer.
      3 
      4 local lexer = lexer
      5 local P, R = lpeg.P, lpeg.R
      6 
      7 local lex = lexer.new(..., {lex_by_line = true})
      8 
      9 -- Comments.
     10 lex:add_rule('comment', lex:tag(lexer.COMMENT, lexer.to_eol(lexer.starts_line('#'))))
     11 
     12 -- Keywords.
     13 lex:add_rule('keyword', lex:tag(lexer.KEYWORD, lexer.starts_line(lex:word_match(lexer.KEYWORD))))
     14 
     15 -- Commit SHA1.
     16 local function patn(pat, min, max)
     17 	return -pat^(max + 1) * pat^min
     18 end
     19 
     20 lex:add_rule('commit', lex:tag(lexer.NUMBER, patn(R('09', 'af'), 7, 40)))
     21 
     22 lex:add_rule('message', lex:tag('message', lexer.to_eol()))
     23 
     24 -- Word lists.
     25 lex:set_word_list(lexer.KEYWORD, [[
     26   p pick
     27   r reword
     28   e edit
     29   s squash
     30   f fixup
     31   x exec
     32   d drop
     33   b break
     34   l label
     35   t reset
     36   m merge
     37 ]])
     38 
     39 return lex