Posts Tagged ‘vim’

Kodtäckning i vim

juni 12, 2014

Jag börjar sakta men säkert komma igång med enhet/integrationstest av den kod jag skriver. Det hjälper och är inte allt för besvärligt när man kommit in i tankesättet. Jag använder mig av gtest och lär mig sakta men säkert dess funktioner.

13 Test och allt funkar, men vad säger det?

13 Test och allt funkar, men vad säger det?

Frågan man bör ställa sig är hur mycket av koden som faktiskt körs av mina tester och vilka olika vägar genom funktionerna som testas, dvs vilken kodtäckning har mina test.

gcc inkluderar verktyget gcov för att generera den här typen av information. Efter att ha lagt till kompilatorflaggorna -fprofile-arcs -ftest-coverage genereras gcov-filer när mina tester körs. Och när man sedan kör

gcov [filnamn.c]

får man en kort sammanfattning samt en gcov-fil

File 'filnamn.c'
Lines executed:64.90% of 510
viacode.c:creating 'viacode.c.gcov'

Den skapade *.gcov filen innehåller information om hur många gånger varje kodrad i filen har exekverats. För att gör det smidigare att använda ville jag ha in resultatet i min editor vim. Efter lite googlande hittade jag ett vim-skript som med lite modifieringar resulterade i detta:

" Based on Gautier DI FOLCO's vcov.vim found in
" https://groups.google.com/forum/#!msg/vim_use/tk9sG714b3I/LyMnXOQAqpMJ
"
" Modified by Åke Forslund <ake.forslund@gmail.com>

hi gcovCovered ctermbg=2
hi gcovNotCovered ctermbg=1

function! Setcov(filename)
exe ":sign unplace *"
for line in readfile(a:filename)
let d = split(line, ':')
let c = substitute(d[0], " *", "", "")
let l = substitute(d[1], " *", "", "")
if c >= 100
let c = '*'
endif
if '-' != c && c !~ '#'
exe ":sign define c" . c . " text=" . c . " texthl=gcovCovered"
exe ":sign place " . l . " line=" . l . " name=c" . c . " file=" . expand("%:p")
elseif c =~ '#'
exe ":sign define cd text=# texthl=gcovNotCovered"
exe ":sign place " . l . " line=" . l . " name=cd file=" . expand("%:p")
endif
endfor
endfunction

function! Unsetcov()
exe ":sign unplace *"
endfunction

map <F11> :call Setcov(expand(@%).".gcov")<cr>
map <F12> :call Unsetcov()<cr>

Skriptet finns på github med.

När jag nu trycker på F11 får jag in information om hur många gånger en viss rad anropas, alla rader som inte exekveras överhuvudtaget markeras i rött och rader som inte räknas in markeras i vitt.

gov-data Visualiserat i vim.

gcov-data Visualiserat i vim.

Det fungerar finfint och hjälper mig extremt mycket i mina taffliga försök att skriva relevanta testfall. Ytterligare funktioner kan med all säkerhet vara önskvärt och min plan är att slipa det ytterligare. T.ex hantera en saknad .gcov-fil på ett snyggt sätt.

Annonser

Omni completion

december 6, 2011

Efter att ha läst ett intressant bloginlägg om att använda vim som Python-IDE har även jag konfigurerat upp vim att åtminstone låta mig auto-komplettera när jag själv vill. För att aktivera omni completion (som denna variant av den här funktionen kallas) se till att du har vim > 7.0 och för in följande i .vimrc

filetype on
filetype plugin on
set ofu=syntaxcomple#Complete

Auto-kompletteringen har som default stöd för c, HTML + CSS, Javascript, PHP, Python, Ruby samt (om man får tro editorn själv) samtliga språk där syntax-highlighting finns tillgängligt (ett horribelt antal).

Något som jag ser som en fördel är att auto-kompletteringen inte är i vägen när den inte är nödvändig utan visas endast vid behov genom den en gnutta ointuitiva knappkombinationen Ctrl+X följt av Ctrl+O.

Omni-complete är lila.

Omni completion är lila.

Bilden visar ganska tydligt att gränssnittet i sann vim-anda, det vill säga väldigt minimalistiskt men visar allt av värde, vilka alternativ som finns samt den dokumentation som finns tillgänglig om alternativet. Man kommer snabbt och effektivt åt de olika valen och kan fortsätta med det egentliga kodandet.

Räkna nu inte antalet gånger jag nämnt vim i det här inlägget, det är på tok för många trots att jag försökt redigera bort några.

Man lär sig något nytt hela tiden

november 24, 2009

Jag använder gärna vim för att redigera text-filer som till exempel konfigurationsfiler samt källkodsfiler. Jag använder dock inte så mycket av vim’s avancerade funktioner utan mest den smidiga sökningen, hex-edit-funktionen samt för att programmet är så lätt att anpassa efter mina preferenser.

Trots att jag använt editorn i fråga i många herrans år har jag aldrig använt sök och ersätt funktionen som i vim är väldigt trevlig.

:%s/sök/ersätt

Detta är det enkla fallet, vi ersätter ordet sök med ordet ersätt.  Sedan har vi möjlighet att söka med hjälp av reguljära uttryck och ersätta dessa. Detta ger möjlighet till massvis av fantastiska möjligheter som jag inte har hittat någon direkt bra användning för ännu men säkert kan ifall jag tränar lite mer.

En annan kul sak jag har lärt mig i vim är att man enkelt kan hoppa till en rad i den öppna filen genom att skriva in rad-nummret följt av G.

ex:

268G

Detta är mycket trevligt när man skriver till exempel python-script och sitter och fixar syntaxfel och följer upp felmeddelanden från python-tolken.