mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 13:50:04 +08:00
193 lines
5.9 KiB
VimL
Vendored
193 lines
5.9 KiB
VimL
Vendored
""
|
|
" @public
|
|
" Search for repos, for how to {sort} result, you can use `stars`,`forks` and
|
|
" `updated`. and for {order} you can use `asc` and `desc`.for {q} see:
|
|
" Input: >
|
|
" {
|
|
" 'in' : 'name,description',
|
|
" 'size' : '',
|
|
" 'forks' : '',
|
|
" 'fork' : '',
|
|
" 'created' : '',
|
|
" 'pushed' : '',
|
|
" 'user' : '',
|
|
" 'language' : '',
|
|
" 'stars' : '',
|
|
" 'keywords' : ''
|
|
" }
|
|
" <
|
|
"
|
|
" Github API : GET /search/repositories
|
|
function! github#api#search#SearchRepos(q,sort,order) abort
|
|
let url = 'search/repositories'
|
|
let _sort = ['stars', 'forks', 'updated']
|
|
let _order = ['asc', 'desc']
|
|
let url = github#api#util#parserArgs(url, 'sort', a:sort, _sort, '')
|
|
if index(_sort, a:sort) != -1
|
|
let url = github#api#util#parserArgs(url, 'order', a:order, _order, 'desc')
|
|
endif
|
|
if stridx(url, '?') == -1
|
|
let url .= '?'
|
|
else
|
|
let url .= '&'
|
|
endif
|
|
let url .= s:parser(a:q, s:repo_scopes)
|
|
return github#api#util#Get(url, [])
|
|
endfunction
|
|
|
|
function! github#api#search#SearchCode(q,sort,order) abort
|
|
let url = 'search/code'
|
|
let _sort = ['indexed']
|
|
let _order = ['asc', 'desc']
|
|
let url = github#api#util#parserArgs(url, 'sort', a:sort, _sort, '')
|
|
if index(_sort, a:sort) != -1
|
|
let url = github#api#util#parserArgs(url, 'order', a:order, _order, 'desc')
|
|
endif
|
|
if stridx(url, '?') == -1
|
|
let url .= '?'
|
|
else
|
|
let url .= '&'
|
|
endif
|
|
let url .= s:parser(a:q, s:code_scopes)
|
|
return github#api#util#Get(url, [])
|
|
endfunction
|
|
|
|
function! github#api#search#SearchIssues(q,sort,order) abort
|
|
let url = 'search/issues'
|
|
let _sort = ['comments', 'created', 'updated']
|
|
let _order = ['asc', 'desc']
|
|
let url = github#api#util#parserArgs(url, 'sort', a:sort, _sort, '')
|
|
if index(_sort, a:sort) != -1
|
|
let url = github#api#util#parserArgs(url, 'order', a:order, _order, 'desc')
|
|
endif
|
|
if stridx(url, '?') == -1
|
|
let url .= '?'
|
|
else
|
|
let url .= '&'
|
|
endif
|
|
let url .= s:parser(a:q, s:issues_scopes)
|
|
return github#api#util#Get(url, [])
|
|
endfunction
|
|
|
|
function! github#api#search#SearchUsers(q,sort,order) abort
|
|
let url = 'search/users'
|
|
let _sort = ['followers', 'repositories', 'joined']
|
|
let _order = ['asc', 'desc']
|
|
let url = github#api#util#parserArgs(url, 'sort', a:sort, _sort, '')
|
|
if index(_sort, a:sort) != -1
|
|
let url = github#api#util#parserArgs(url, 'order', a:order, _order, 'desc')
|
|
endif
|
|
if stridx(url, '?') == -1
|
|
let url .= '?'
|
|
else
|
|
let url .= '&'
|
|
endif
|
|
let url .= s:parser(a:q, s:users_scopes)
|
|
return github#api#util#Get(url, [])
|
|
endfunction
|
|
|
|
" default scopes [valid values, default values]
|
|
let s:repo_scopes = {
|
|
\ 'in' : [['name', 'description', 'readme'], 'name,description'],
|
|
\ 'size' : '',
|
|
\ 'forks' : '',
|
|
\ 'fork' : '',
|
|
\ 'created' : '',
|
|
\ 'pushed' : '',
|
|
\ 'user' : '',
|
|
\ 'language' : '',
|
|
\ 'stars' : '',
|
|
\ 'keywords' : ''
|
|
\ }
|
|
let s:code_scopes = {
|
|
\ 'in' : 'file',
|
|
\ 'path' : '',
|
|
\ 'filename' : '',
|
|
\ 'extension' : '',
|
|
\ 'user' : '',
|
|
\ 'size' : '',
|
|
\ 'forks' : '',
|
|
\ 'fork' : '',
|
|
\ 'language' : ''
|
|
\ }
|
|
" https://help.github.com/articles/searching-issues/
|
|
let s:issues_scopes = {
|
|
\ 'type' : 'pr,issue',
|
|
\ 'in' : 'title,body,comments',
|
|
\ 'author' : '',
|
|
\ 'assignee' : '',
|
|
\ 'mentions' : '',
|
|
\ 'commenter' : '',
|
|
\ 'involves' : '',
|
|
\ 'team' : '',
|
|
\ 'state' : '',
|
|
\ 'label' : '',
|
|
\ 'milestone' : '',
|
|
\ 'no' : '',
|
|
\ 'language' : '',
|
|
\ 'is' : '',
|
|
\ 'created' : '',
|
|
\ 'updated' : '',
|
|
\ 'merged' : '',
|
|
\ 'status' : '',
|
|
\ 'head' : '',
|
|
\ 'base' : '',
|
|
\ 'closed' : '',
|
|
\ 'comments' : '',
|
|
\ 'user' : ''
|
|
\ }
|
|
let s:users_scopes = {
|
|
\ 'type' : 'org,user',
|
|
\ 'in' : 'username,email',
|
|
\ 'repos' : '',
|
|
\ 'location' : '',
|
|
\ 'language' : '',
|
|
\ 'created' : '',
|
|
\ 'followers' : ''
|
|
\ }
|
|
function! s:parser(q,scopes) abort
|
|
let scopes = copy(a:scopes)
|
|
" parser q
|
|
let rs = ''
|
|
if type(a:q) == type({})
|
|
if has_key(a:q, 'keywords')
|
|
let rs .= 'q=' . get(a:q, 'keywords')
|
|
call remove(a:q, 'keywords')
|
|
endif
|
|
for scope in keys(scopes)
|
|
if has_key(a:q, scope) && !empty(get(a:q, scope))
|
|
let res = s:getArgv(get(a:q, scope), get(scopes, scope))
|
|
if !empty(res)
|
|
let rs .= '+' . scope . ':' . res
|
|
endif
|
|
endif
|
|
endfor
|
|
elseif type(a:q) == type('')
|
|
let rs .= 'q=' . a:q
|
|
endif
|
|
return rs
|
|
endfunction
|
|
|
|
fu! s:getArgv(args,base) abort
|
|
if type(a:base) == type([])
|
|
let vars = a:base[0]
|
|
let default = a:base[1]
|
|
let f = 0
|
|
for a in (type(a:args) == type('') ? split(a:args, ',') : a:args)
|
|
if index(vars, a) == -1
|
|
let f = 1
|
|
endif
|
|
endfor
|
|
if f && !empty(default)
|
|
let result = default
|
|
elseif f
|
|
let result = ''
|
|
else
|
|
let result = a:args
|
|
endif
|
|
return result
|
|
elseif type(a:base) == type('') && empty(a:base)
|
|
return ''
|
|
endif
|
|
endf
|