Я работаю с кодом LLVM-IR, созданным clang -emit-llvm
и хочу получить код, складывающий работу.Синтаксис LLVM-IR складной для Vim
До сих пор я использую foldmethod=expr
и foldexpr=LLVMFold()
. Я хотел бы использовать сгибание на основе синтаксиса (т. Е. foldmethod=syntax
) с использованием файла синтаксиса из репозитория llvm. Available here.
Обратите внимание, что первое регулярное выражение из файла синтаксиса для метки.
function! LLVMFolds()
let thisline = getline(v:lnum)
if match(thisline, '^[-a-zA-Z$._][-a-zA-Z$._0-9]*:') >= 0
return ">2"
elseif match(thisline, '^\}$') >= 0
return "<1"
elseif match(thisline, '{$') >= 0
return ">1"
else
return "="
endif
endfunction
Которая зажимает закрывающие фигурные скобки на уровне 2 складок.
также попытался было foldmethod=indent
, не фолд достаточно и foldmethod=marker
с foldmark="{,}"
В идеале для этого образца неполной LLVM-IR код:
define i32 @main() nounwind {
entry:
%retval = alloca i32, align 4
for.cond: ; preds = %entry
%4 = load i32* %i, align 4
%cmp1 = icmp slt i32 %4, 10
br i1 %cmp1, label %for.body, label %for.end
}
Я хотел сгибы быть от {
в define
к }
и в каждой помеченной секции, то есть от entry:
до четкой линии.
Это подсветка синтаксиса и ftdetect доступны на моем [GitHub] (https://github.com/EdJoJob/llvmir-vim) – EdJoJob