1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-02 21:10:05 +08:00

Compare commits

...

4 Commits

Author SHA1 Message Date
Eric Wong
057c0d5ed0 fix(detach): fix detach url 2024-07-24 19:27:52 +08:00
Eric Wong
c555aa156c chore(async): detach SourceCounter.vim 2024-07-24 19:24:48 +08:00
Eric Wong
40edbe8d6c perf(SourceCounter): import sourcecounter 2024-07-24 19:12:58 +08:00
Eric Wong
a974fb5646 fix(bootstrap): use timer for bootstrap_after 2024-07-24 17:51:14 +08:00
6 changed files with 209 additions and 163 deletions

View File

@ -179,6 +179,39 @@ main () {
rm -rf detach/$1
exit 0
;;
SourceCounter.vim)
git clone https://github.com/wsdjeg/SourceCounter.vim.git detach/$1
cd detach/$1
_checkdir plugin
_detact_bundle SourceCounter.vim plugin/SourceCounter.vim
_checkdir autoload
_detact_bundle SourceCounter.vim autoload/SourceCounter.vim
_checkdir doc
_detact_bundle SourceCounter.vim doc/SourceCounter.vim.txt
_detact_bundle SourceCounter.vim README.md
_detact_bundle SourceCounter.vim addon-info.json
_detact LICENSE
_checkdir pic
_detact_bundle SourceCounter.vim pic/screen.png
_checkdir autoload/SpaceVim/api/vim
_checkdir autoload/SpaceVim/api/data
_detact autoload/SpaceVim/api/notify.vim
_detact autoload/SpaceVim/api/data/string.vim
_detact autoload/SpaceVim/api/data/number.vim
_detact autoload/SpaceVim/api/vim/buffer.vim
_detact autoload/SpaceVim/api/vim/floatting.vim
_checkdir autoload/SpaceVim/api/neovim
_detact autoload/SpaceVim/api/neovim/floatting.vim
git add .
git config user.email "eric@wsdjeg.net"
git config user.name "Eric Wong"
git commit -m "Auto Update based on https://github.com/SpaceVim/SpaceVim/commit/${GITHUB_SHA}"
git remote add wsdjeg_sourcecounter https://SpaceVimBot:${BOTSECRET}@github.com/wsdjeg/SourceCounter.vim.git
git push wsdjeg_sourcecounter master
cd -
rm -rf detach/$1
exit 0
;;
iedit)
git clone https://github.com/wsdjeg/iedit.vim.git detach/$1
cd detach/$1

View File

@ -7,7 +7,7 @@ jobs:
strategy:
fail-fast: false
matrix:
detachPlugin: ["flygrep", "dein-ui", "vim-todo", "iedit", "scrollbar.vim", "vim-chat", "vim-cheat", "xmake.vim", "github.vim", "JavaUnit.vim", "git.vim", "cpicker.nvim"]
detachPlugin: ["flygrep", "dein-ui", "vim-todo", "iedit", "scrollbar.vim", "vim-chat", "vim-cheat", "xmake.vim", "github.vim", "JavaUnit.vim", "git.vim", "cpicker.nvim", "SourceCounter.vim"]
runs-on: ubuntu-latest
steps:
- name: Checkout

View File

@ -26,26 +26,22 @@ if has('nvim-0.10.0')
call SpaceVim#logger#info('run root changed callback on VimEnter!')
call SpaceVim#plugins#projectmanager#RootchandgeCallback()
if !empty(get(g:, '_spacevim_bootstrap_after', ''))
try
call call(g:_spacevim_bootstrap_after, [])
let g:_spacevim_bootstrap_after_success = 1
catch
call SpaceVim#logger#error('failed to call bootstrap_after function: ' . g:_spacevim_bootstrap_after)
call SpaceVim#logger#error(' exception: ' . v:exception)
call SpaceVim#logger#error(' throwpoint: ' . v:throwpoint)
let g:_spacevim_bootstrap_after_success = 0
endtry
endif
if !get(g:, '_spacevim_bootstrap_before_success', 1)
echohl Error
echom 'bootstrap_before function failed to execute. Check `SPC h L` for errors.'
echohl None
endif
if !get(g:, '_spacevim_bootstrap_after_success', 1)
echohl Error
echom 'bootstrap_after function failed to execute. Check `SPC h L` for errors.'
echohl None
function! s:bootstrap_after(...) abort
try
call call(g:_spacevim_bootstrap_after, [])
let g:_spacevim_bootstrap_after_success = 1
catch
call SpaceVim#logger#error('failed to call bootstrap_after function: ' . g:_spacevim_bootstrap_after)
call SpaceVim#logger#error(' exception: ' . v:exception)
call SpaceVim#logger#error(' throwpoint: ' . v:throwpoint)
let g:_spacevim_bootstrap_after_success = 0
endtry
endfunction
if has('timers')
call timer_start(g:spacevim_lazy_conf_timeout, function('s:bootstrap_after'))
else
call s:bootstrap_after()
endif
endif
if !filereadable('.SpaceVim.d/init.toml') && filereadable('.SpaceVim.d/init.vim')

View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2016 Wang Shidong
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,150 +1,188 @@
let s:JOB = SpaceVim#api#import('job')
let s:NOTI = SpaceVim#api#import('notify')
scriptencoding utf-8
let s:support_ft = ['vim', 'java', 'c', 'py', 'md', 'txt']
function! SourceCounter#View(bang, ...) abort
let result = []
if a:0
let fts = a:000
else
let fts = s:support_ft
call s:NOTI.notify(string(a:000))
let fts = []
let dirs = []
let result = {}
let argv_type = ''
for argv in a:000
if argv == '-d'
let argv_type = 'dir'
continue
elseif argv == '-ft'
let argv_type = 'filetype'
continue
endif
call s:NOTI.notify('counting for: ' . join(fts, ', '))
" return
if argv_type == 'dir'
call add(dirs, argv)
elseif argv_type == 'filetype'
call add(fts, argv)
endif
endfor
call s:NOTI.notify('counting for: ' . join(fts, ', '))
" return
for dir in dirs
for ft in fts
let _rs = s:counter(ft)
if !empty(_rs)
call add(result, _rs)
let _rs = s:counter(ft, dir)
if !empty(_rs)
if has_key(result, ft)
let result[ft].files = result[ft].files + _rs.files
let result[ft].lines = result[ft].lines + _rs.lines
else
let result[ft] = {
\ 'files' : _rs.files,
\ 'lines' : _rs.lines,
\ }
endif
endif
endfor
let result = sort(deepcopy(result), function('s:compare'))
let table = s:draw_table(result)
if a:bang
tabnew
for line in table
call append(line('$'), line)
endfor
else
call s:NOTI.notify(join(table, "\n"))
endif
endfor
let result = sort(s:build(result), function('s:compare'))
let table = s:draw_table(result)
if a:bang
tabnew
setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline nospell nonumber norelativenumber
setlocal modifiable
noautocmd normal! gg"_dG
for line in table
call append(line('$'), line)
endfor
normal! G
setlocal nomodifiable
nnoremap <buffer><silent> q :bd<CR>
else
call s:NOTI.notify(join(table, "\n"))
endif
endfunction
function! s:build(rst) abort
let rst = []
for k in keys(a:rst)
call add(rst, [k, a:rst[k].files, a:rst[k].lines])
endfor
return rst
endfunction
function! s:compare(a, b) abort
let m = get(g:, 'source_counter_sort', 'files')
if m ==# 'lines'
return a:a[2] == a:b[2] ? 0 : a:a[2] > a:b[2] ? -1 : 1
else
return a:a[1] == a:b[1] ? 0 : a:a[1] > a:b[1] ? -1 : 1
endif
let m = get(g:, 'source_counter_sort', 'files')
if m ==# 'lines'
return a:a[2] == a:b[2] ? 0 : a:a[2] > a:b[2] ? -1 : 1
else
return a:a[1] == a:b[1] ? 0 : a:a[1] > a:b[1] ? -1 : 1
endif
endfunction
" https://en.wikipedia.org/wiki/Box-drawing_character
function! s:draw_table(rst) abort
if &encoding ==# 'utf-8'
let top_left_corner = '╭'
let top_right_corner = '╮'
let bottom_left_corner = '╰'
let bottom_right_corner = '╯'
let side = '│'
let top_bottom_side = '─'
let middle = '┼'
let top_middle = '┬'
let left_middle = '├'
let right_middle = '┤'
let bottom_middle = '┴'
else
let top_left_corner = '*'
let top_right_corner = '*'
let bottom_left_corner = '*'
let bottom_right_corner = '*'
let side = '|'
let top_bottom_side = '-'
let middle = '*'
let top_middle = '*'
let left_middle = '*'
let right_middle = '*'
let bottom_middle = '*'
endif
let table = []
let top_line = top_left_corner
\ . repeat(top_bottom_side, 15)
\ . top_middle
\ . repeat(top_bottom_side, 15)
\ . top_middle
\ . repeat(top_bottom_side, 15)
\ . top_right_corner
if &encoding ==# 'utf-8'
let top_left_corner = '╭'
let top_right_corner = '╮'
let bottom_left_corner = '╰'
let bottom_right_corner = '╯'
let side = '│'
let top_bottom_side = '─'
let middle = '┼'
let top_middle = '┬'
let left_middle = '├'
let right_middle = '┤'
let bottom_middle = '┴'
else
let top_left_corner = '*'
let top_right_corner = '*'
let bottom_left_corner = '*'
let bottom_right_corner = '*'
let side = '|'
let top_bottom_side = '-'
let middle = '*'
let top_middle = '*'
let left_middle = '*'
let right_middle = '*'
let bottom_middle = '*'
endif
let table = []
let top_line = top_left_corner
\ . repeat(top_bottom_side, 15)
\ . top_middle
\ . repeat(top_bottom_side, 15)
\ . top_middle
\ . repeat(top_bottom_side, 15)
\ . top_right_corner
let middle_line = left_middle
\ . repeat(top_bottom_side, 15)
\ . middle
\ . repeat(top_bottom_side, 15)
\ . middle
\ . repeat(top_bottom_side, 15)
\ . right_middle
let middle_line = left_middle
\ . repeat(top_bottom_side, 15)
\ . middle
\ . repeat(top_bottom_side, 15)
\ . middle
\ . repeat(top_bottom_side, 15)
\ . right_middle
let bottom_line = bottom_left_corner
\ . repeat(top_bottom_side, 15)
\ . bottom_middle
\ . repeat(top_bottom_side, 15)
\ . bottom_middle
\ . repeat(top_bottom_side, 15)
\ . bottom_right_corner
let bottom_line = bottom_left_corner
\ . repeat(top_bottom_side, 15)
\ . bottom_middle
\ . repeat(top_bottom_side, 15)
\ . bottom_middle
\ . repeat(top_bottom_side, 15)
\ . bottom_right_corner
call add(table, top_line)
let result = [['filetype', 'files', 'lines']] + a:rst
for rsl in result
let ft_line = side
\ . rsl[0] . repeat(' ', 15 - strwidth(rsl[0]))
\ . side
\ . rsl[1] . repeat(' ', 15 - strwidth(rsl[1]))
\ . side
\ . rsl[2] . repeat(' ', 15 - strwidth(rsl[2]))
\ . side
call add(table, ft_line)
call add(table, middle_line)
endfor
let table[-1] = bottom_line
return table
call add(table, top_line)
let result = [['filetype', 'files', 'lines']] + a:rst
for rsl in result
let ft_line = side
\ . rsl[0] . repeat(' ', 15 - strwidth(rsl[0]))
\ . side
\ . rsl[1] . repeat(' ', 15 - strwidth(rsl[1]))
\ . side
\ . rsl[2] . repeat(' ', 15 - strwidth(rsl[2]))
\ . side
call add(table, ft_line)
call add(table, middle_line)
endfor
let table[-1] = bottom_line
return table
endfunction
function! s:list_files_stdout(id, data, event) abort
endfunction
function! s:list_files_exit(id, data, event) abort
endfunction
function! s:counter(ft) abort
let path = getcwd()
let partten = '**/*.' . a:ft
if executable('ag')
if has('nvim')
let files = systemlist(['ag','-g', '.' . a:ft . '$'])
else
let files = split(system('ag -g .'.a:ft.'$'),nr2char(10))
endif
else
let files = globpath(l:path, l:partten, 0, 1)
endif
if len(files) == 0
return []
endif
let lines = 0
function! s:counter(ft, dir) abort
if executable('ag')
if has('nvim')
if len(files) > 380
while !empty(files)
let lines += matchstr(systemlist(['wc', '-l'] + remove(files, 0, min([380, len(files) - 1])))[-1], '\d\+')
endwhile
else
let lines = matchstr(systemlist(['wc', '-l'] + files)[-1], '\d\+')
endif
let files = systemlist(['ag','-g', '.' . a:ft . '$'])
else
for fl in files
let lines += str2nr(matchstr(system('wc -l '. fl), '\d\+'))
endfor
let files = split(system('ag -g .'.a:ft.'$'),nr2char(10))
endif
return [a:ft, len(files), lines]
else
let partten = '**/*.' . a:ft
let files = globpath(a:dir, l:partten, 0, 1)
endif
if len(files) == 0
return []
endif
let lines = 0
let _file_count = len(files)
if has('nvim')
if len(files) > 380
while !empty(files)
let _fs = remove(files, 0, min([380, len(files) - 1]))
let _rst = systemlist(['wc', '-l'] + _fs)[-1]
let lines += matchstr(_rst, '\d\+')
endwhile
else
let lines = matchstr(systemlist(['wc', '-l'] + files)[-1], '\d\+')
endif
else
for fl in files
let lines += str2nr(matchstr(system('wc -l '. fl), '\d\+'))
endfor
endif
return {'files' : _file_count, 'lines' : lines}
endfunction

View File

@ -3,9 +3,9 @@ wsdjeg *SourceCounter.vim*
==============================================================================
CONTENTS *SourceCounter.vim-contents*
1. Introduction....................................|SourceCounter.vim-intro|
2. Configuration..................................|SourceCounter.vim-config|
3. Commands.....................................|SourceCounter.vim-commands|
1. Introduction..................................... |SourceCounter.vim-intro|
2. Configuration................................... |SourceCounter.vim-config|
3. Commands...................................... |SourceCounter.vim-commands|
==============================================================================
INTRODUCTION *SourceCounter.vim-intro*