aboutsummaryrefslogtreecommitdiff
path: root/lua/lexers
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2018-03-14 22:23:13 +0100
committerMarc André Tanner <mat@brain-dump.org>2020-02-10 10:04:57 +0100
commitbc5488644e4803e86e5937a14a3b73724afb196b (patch)
treeecbcd34a2150f06213053d43a1417a944dfa1067 /lua/lexers
parente5fd54902c4a53a5ae5fe49ad3b91c5c0d2c286f (diff)
downloadvis-bc5488644e4803e86e5937a14a3b73724afb196b.tar.gz
vis-bc5488644e4803e86e5937a14a3b73724afb196b.tar.xz
lexers: add git rebase lexer
Diffstat (limited to 'lua/lexers')
-rw-r--r--lua/lexers/git-rebase.lua50
1 files changed, 50 insertions, 0 deletions
diff --git a/lua/lexers/git-rebase.lua b/lua/lexers/git-rebase.lua
new file mode 100644
index 0000000..b6bcf37
--- /dev/null
+++ b/lua/lexers/git-rebase.lua
@@ -0,0 +1,50 @@
+-- Copyright 2017 Marc André Tanner
+-- git-rebase(1) LPeg lexer.
+
+local l = require('lexer')
+local token, word_match = l.token, l.word_match
+local P, R = lpeg.P, lpeg.R
+
+local M = {_NAME = 'git-rebase'}
+
+-- Whitespace.
+local ws = token(l.WHITESPACE, l.space^1)
+
+-- Comments.
+local comment = token(l.COMMENT, l.starts_line('#') * l.nonnewline^0)
+
+-- Keywords.
+local keywords = l.starts_line(word_match{
+ 'p', 'pick',
+ 'r', 'reword',
+ 'e', 'edit',
+ 's', 'squash',
+ 'f', 'fixup',
+ 'x', 'exec',
+ 'd', 'drop',
+ 'l', 'label',
+ 't', 'reset',
+ 'm', 'merge',
+})
+local keyword = token(l.KEYWORD, keywords)
+
+-- Commit SHA1.
+local function patn(pat, min, max)
+ return -pat^(max + 1) * pat^min
+end
+
+local commit = token(l.NUMBER, patn(R('09', 'af'), 7, 40))
+
+local message = token(l.STRING, l.nonnewline^1)
+
+M._rules = {
+ {'whitespace', ws},
+ {'comment', comment},
+ {'keyword', keyword},
+ {'commit', commit},
+ {'message', message},
+}
+
+M._LEXBYLINE = true
+
+return M