Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
cucumber.vim105 linesDownload Raw Back to indent
1" Vim indent file2" Language:	Cucumber3" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>4" Last Change:	2023 Dec 285" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)6 7if exists("b:did_indent")8  finish9endif10let b:did_indent = 111let s:cpo_save = &cpo12set cpo&vim13 14setlocal autoindent15setlocal indentexpr=GetCucumberIndent()16setlocal indentkeys=o,O,*<Return>,<:>,0<Bar>,0#,=,!^F17 18let b:undo_indent = 'setl ai< inde< indk<'19 20" Only define the function once.21if exists("*GetCucumberIndent")22  finish23endif24 25let s:headings = {26      \ 'Feature': 'feature',27      \ 'Rule': 'rule',28      \ 'Background': 'bg_or_scenario',29      \ 'Scenario': 'bg_or_scenario',30      \ 'ScenarioOutline': 'bg_or_scenario',31      \ 'Examples': 'examples',32      \ 'Scenarios': 'examples'}33 34function! s:Line(lnum) abort35  if getline(a:lnum) =~# ':'36    let group = matchstr(synIDattr(synID(a:lnum,1+indent(a:lnum), 1), 'name'), '^cucumber\zs.*')37    if !has_key(s:headings, group)38      let group = substitute(matchstr(getline(a:lnum), '^\s*\zs\%([^:]\+\)\ze:\S\@!'), '\s\+', '', 'g')39    endif40  else41    let group = ''42  endif43  let char = matchstr(getline(a:lnum), '^\s*\zs[[:punct:]]')44  return {45        \ 'lnum': a:lnum,46        \ 'indent': indent(a:lnum),47        \ 'heading': get(s:headings, group, ''),48        \ 'tag': char ==# '@',49        \ 'table': char ==# '|',50        \ 'comment': char ==# '#',51        \ }52endfunction53 54function! GetCucumberIndent(...) abort55  let lnum = a:0 ? a:1 : v:lnum56  let sw = shiftwidth()57  let prev = s:Line(prevnonblank(lnum-1))58  let curr = s:Line(lnum)59  let next = s:Line(nextnonblank(lnum+1))60  if curr.heading ==# 'feature'61    " feature heading62    return 063  elseif curr.heading ==# 'examples'64    " examples heading65    return 2 * sw66  elseif curr.heading ==# 'bg_or_scenario'67    " background, scenario or outline heading68    return sw69  elseif prev.heading ==# 'feature'70    " line after feature heading71    return sw72  elseif prev.heading ==# 'examples'73    " line after examples heading74    return 3 * sw75  elseif prev.heading ==# 'bg_or_scenario'76    " line after background, scenario or outline heading77    return 2 * sw78  elseif (curr.tag || curr.comment) && (next.heading ==# 'feature' || prev.indent <= 0)79    " tag or comment before a feature heading80    return 081  elseif curr.tag82    " other tags83    return sw84  elseif (curr.table || curr.comment) && prev.table85    " mid-table86    " preserve indent87    return prev.indent88  elseif curr.table && !prev.table89    " first line of a table, relative indent90    return prev.indent + sw91  elseif !curr.table && prev.table92    " line after a table, relative unindent93    return prev.indent - sw94  elseif curr.comment && getline(v:lnum-1) =~# '^\s*$' && next.heading ==# 'bg_or_scenario'95    " comments on scenarios96    return sw97  endif98  return prev.indent < 0 ? 0 : prev.indent99endfunction100 101let &cpo = s:cpo_save102unlet s:cpo_save103 104" vim:set sts=2 sw=2:105 
codekingpro/portable-devtools · Team Ai