Skip to content

Commit 242f7ad

Browse files
committed
Indent: Allow indentation aligned with block start keyword
Add new variable `verilog_indent_block_on_keyword` that will make indentation in block have an extra offset to align with the column where "begin" keyword starts.
1 parent 0d954be commit 242f7ad

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

doc/tags

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
:VerilogReturnInstance verilog_systemverilog.txt /*:VerilogReturnInstance*
1010
b:verilog_disable_indent_lst verilog_systemverilog.txt /*b:verilog_disable_indent_lst*
1111
b:verilog_indent_assign_fix verilog_systemverilog.txt /*b:verilog_indent_assign_fix*
12+
b:verilog_indent_block_on_keyword verilog_systemverilog.txt /*b:verilog_indent_block_on_keyword*
1213
b:verilog_indent_width verilog_systemverilog.txt /*b:verilog_indent_width*
1314
b:verilog_syntax_custom verilog_systemverilog.txt /*b:verilog_syntax_custom*
1415
b:verilog_syntax_fold_lst verilog_systemverilog.txt /*b:verilog_syntax_fold_lst*
@@ -20,6 +21,7 @@ g:verilog_efm_level verilog_systemverilog.txt /*g:verilog_efm_level*
2021
g:verilog_efm_quickfix_clean verilog_systemverilog.txt /*g:verilog_efm_quickfix_clean*
2122
g:verilog_efm_uvm_lst verilog_systemverilog.txt /*g:verilog_efm_uvm_lst*
2223
g:verilog_indent_assign_fix verilog_systemverilog.txt /*g:verilog_indent_assign_fix*
24+
g:verilog_indent_block_on_keyword verilog_systemverilog.txt /*g:verilog_indent_block_on_keyword*
2325
g:verilog_indent_width verilog_systemverilog.txt /*g:verilog_indent_width*
2426
g:verilog_navigate_split verilog_systemverilog.txt /*g:verilog_navigate_split*
2527
g:verilog_navigate_split_close verilog_systemverilog.txt /*g:verilog_navigate_split_close*

doc/verilog_systemverilog.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,39 @@ Example:
384384
let b:verilog_indent_assign_fix = 1
385385
<
386386

387+
*b:verilog_indent_block_on_keyword* *g:verilog_indent_block_on_keyword*
388+
b:verilog_indent_block_on_keyword~
389+
g:verilog_indent_block_on_keyword~
390+
Default: undefined
391+
392+
Always indent lines following a block start on the "begin" keyword.
393+
By default, the indentation script will use the indent of the line where
394+
the block starts:
395+
>
396+
case (value)
397+
default : begin
398+
x <= y;
399+
y <= z;
400+
end
401+
endcase
402+
<
403+
When this option is enabled the indentation will be offset to the start of
404+
the "begin" keyword, as following:
405+
>
406+
case (value)
407+
default : begin
408+
x <= y;
409+
y <= z;
410+
end
411+
endcase
412+
<
413+
414+
Example:
415+
416+
>
417+
let b:verilog_indent_block_on_keyword = 1
418+
<
419+
387420
*b:verilog_disable_indent_lst* *g:verilog_disable_indent_lst*
388421
b:verilog_disable_indent_lst~
389422
g:verilog_disable_indent_lst~

indent/verilog_systemverilog.vim

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,15 @@ function! GetVerilogSystemVerilogIndent()
126126
elseif s:curr_line =~ '^\s*\<endclass\>'
127127
return indent(s:SearchForBlockStart('\<class\>' , '', '\<endclass\>' , v:lnum, 0))
128128
elseif s:curr_line =~ '^\s*\<end\>'
129-
return indent(s:SearchForBlockStart('\<begin\>' , '', '\<end\>' , v:lnum, 1))
129+
let l:start_lnum = s:SearchForBlockStart('\<begin\>' , '', '\<end\>' , v:lnum, 1)
130+
let l:start_indent = indent(l:start_lnum)
131+
if (verilog_systemverilog#VariableExists("verilog_indent_block_on_keyword"))
132+
let l:block_offset = match(getline(l:start_lnum)[l:start_indent:], 'begin')
133+
call verilog_systemverilog#Verbose('Return indent to start of block keyword (offset=' . l:block_offset . ')')
134+
return l:start_indent + l:block_offset
135+
else
136+
return l:start_indent
137+
endif
130138
elseif s:curr_line =~ '^\s*\<endcase\>'
131139
return indent(s:SearchForBlockStart(s:vlog_case , '', '\<endcase\>' , v:lnum, 0))
132140
endif
@@ -290,7 +298,12 @@ function! s:GetContextIndent()
290298

291299
if l:line =~ '\<begin\>' && l:line !~ '\<begin\>.*\<end\>'
292300
call verilog_systemverilog#Verbose("Inside a 'begin end' block.")
293-
return indent(l:lnum) + s:offset + l:open_offset
301+
let l:block_offset = 0
302+
if (verilog_systemverilog#VariableExists("verilog_indent_block_on_keyword"))
303+
call verilog_systemverilog#Verbose("Matching start of block keyword")
304+
let l:block_offset = match(l:line[indent(l:lnum):], 'begin')
305+
endif
306+
return indent(l:lnum) + s:offset + l:open_offset + l:block_offset
294307
elseif l:line =~ '^\s*\<fork\>'
295308
call verilog_systemverilog#Verbose("Inside a 'fork join' block.")
296309
return indent(l:lnum) + s:offset + l:open_offset

0 commit comments

Comments
 (0)