@@ -98,68 +98,81 @@ local all_lines_before_are_all_comments =
9898 " ^%s*$" ,
9999 }
100100
101+ local default_quick_markers = {
102+ v = { params = 1 , template = " std::vector<%s>" },
103+ i = { params = 0 , template = " int32_t" },
104+ s = { params = 0 , template = " std::string" },
105+ u = { params = 0 , template = " uint32_t" },
106+ m = { params = 2 , template = " absl::flat_hash_map<%s, %s>" },
107+ t = { params = - 1 , template = " std::tuple<%s>" },
108+ }
109+
101110--- @param shortcut string
102111--- @return string ?
103112local function quick_type (shortcut )
104- -- v = std::vector, 1
105- -- i = int32_t, 0
106- -- s = std::string, 0
107- -- u = uint32_t, 0
108- -- m = absl::flat_hash_map, 2
109- -- t = std::tuple, *
113+ --- @type luasnip-snippets.config
114+ local Config = require (" luasnip-snippets.config" )
115+ local quick_markers = Config .get (" snippet.cpp.quick_type.extra_trig" ) or {}
116+ local markers = vim .deepcopy (default_quick_markers )
117+ for _ , marker in ipairs (quick_markers ) do
118+ markers [marker .trig ] = {
119+ params = marker .params ,
120+ template = marker .template ,
121+ }
122+ end
123+
110124 --- @param s string
111125 --- @return string ?, string ?
112126 local function expect_typename (s )
113127 local first , rest = s :match (" ^(%l)(.*)$" )
114128 if first == nil then
115129 return nil , nil
116130 end
117- if first == " v" then
118- local typename , sub_rest = expect_typename (rest )
119- if typename == nil then
120- return " std::vector" , rest
121- else
122- return (" std::vector<%s>" ):format (typename ), sub_rest
123- end
124- elseif first == " i" then
125- return " int32_t" , rest
126- elseif first == " s" then
127- return " std::string" , rest
128- elseif first == " u" then
129- return " uint32_t" , rest
130- elseif first == " m" then
131- local key_type , key_rest = expect_typename (rest )
132- if key_type == nil or key_rest == nil then
133- return " absl::flat_hash_map" , rest
134- end
135- local value_type , value_rest = expect_typename (key_rest )
136- if value_type == nil or value_rest == nil then
137- return " absl::flat_hash_map" , rest
138- end
139- return (" absl::flat_hash_map<%s, %s>" ):format (key_type , value_type ),
140- value_rest
141- elseif first == " t" then
131+
132+ local trig = markers [first ]
133+ if trig == nil then
134+ return nil , nil
135+ end
136+
137+ if trig .params == - 1 then
142138 local parameters = {}
143139 while # rest > 0 do
144140 local typename , sub_rest = expect_typename (rest )
145141 if typename == nil or sub_rest == nil then
146- if # parameters == 0 then
147- return " std::tuple" , rest
148- end
149- return (" std::tuple<%s>" ):format (table.concat (parameters , " , " )), rest
142+ break
150143 end
151144 parameters [# parameters + 1 ] = typename
152145 rest = sub_rest
153146 end
154- return (" std::tuple<%s>" ):format (table.concat (parameters , " , " )), rest
147+ return (trig .template ):format (table.concat (parameters , " , " )), rest
148+ end
149+
150+ if trig .params == 0 then
151+ return trig .template , rest
152+ end
153+
154+ local parameters = {}
155+ for _ = 1 , trig .params do
156+ local typename , sub_rest = expect_typename (rest )
157+ if typename == nil or sub_rest == nil then
158+ return nil , rest
159+ end
160+ parameters [# parameters + 1 ] = typename
161+ rest = sub_rest
155162 end
163+
164+ return string.format (trig .template , unpack (parameters )), rest
156165 end
157166
158167 local result , rest = expect_typename (shortcut )
159168 if rest and # rest > 0 then
160169 print ((" After QET eval, rest not empty: %s" ):format (rest ))
161170 end
162- return result
171+ if result == nil then
172+ return shortcut
173+ else
174+ return result
175+ end
163176end
164177
165178return {
0 commit comments