Skip to content

Commit

Permalink
Add argument from_normal to denippet#get_complete_items
Browse files Browse the repository at this point in the history
  • Loading branch information
uga-rosa committed Dec 1, 2023
1 parent d3e9ff0 commit 13e4933
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 12 deletions.
9 changes: 7 additions & 2 deletions autoload/denippet.vim
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,13 @@ function denippet#choice(dir) abort
call s:request('choice', [a:dir])
endfunction

function denippet#get_complete_items() abort
return s:request('getCompleteItems')
function s:to_boolean(x) abort
return a:x ? v:true : v:false
endfunction

function denippet#get_complete_items(...) abort
let from_normal = a:0 > 0 ? a:1 : mode() ==# 'n'
return s:request('getCompleteItems', [s:to_boolean(from_normal)])
endfunction

function denippet#to_string(body) abort
Expand Down
18 changes: 13 additions & 5 deletions autoload/denippet/load.vim
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
function denippet#load#base() abort
return line('$') == 1 && getline(1) =~# '\v^\k+$'
function denippet#load#base(from_normal) abort
let enabled = v:true
let enabled = enabled && line('$') == 1
let enabled = enabled && getline(1) =~# (a:from_normal ? '\v^$' : '\v^\k+$')
return enabled
endfunction

function denippet#load#start() abort
return getline('.')[:col('.')-2]
\ ->match('\V\s\*\k\+\$') > -1
function denippet#load#start(from_normal) abort
if a:from_normal && col('.') == 1
let line_before_cursor = ''
else
let line_before_cursor = getline('.')[:col('.')-2]
endif
let pattern = a:from_normal ? '\v^\s*$' : '\v^\s*\k*$'
return match(line_before_cursor, pattern) > -1
endfunction
5 changes: 3 additions & 2 deletions denops/denippet/loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ function setSnippets(
export async function getSnippets(
denops: Denops,
ft: string,
fromNormal: boolean,
): Promise<NormalizedSnippet[]> {
const snippets = [
...Cell[ft] ?? [],
Expand All @@ -85,9 +86,9 @@ export async function getSnippets(
} else if (isIfFunc(snippet.if)) {
return Boolean(await snippet.if(denops));
} else if (snippet.if === "base") {
return Boolean(await denops.call("denippet#load#base"));
return Boolean(await denops.call("denippet#load#base", fromNormal));
} else if (snippet.if === "start") {
return Boolean(await denops.call("denippet#load#start"));
return Boolean(await denops.call("denippet#load#start", fromNormal));
} else if (!snippet.eval) {
return false;
} else if (snippet.if === "vimscript") {
Expand Down
7 changes: 4 additions & 3 deletions denops/denippet/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ async function searchSnippet(

let bestMatch: SearchResult = {};
const filetype = await op.filetype.get(denops);
(await getSnippets(denops, filetype)).forEach((snippet) => {
(await getSnippets(denops, filetype, false)).forEach((snippet) => {
snippet.prefix.forEach((prefix) => {
if (
lineBeforeCursor.endsWith(prefix) &&
Expand Down Expand Up @@ -166,9 +166,10 @@ export function main(denops: Denops): void {
await session.choice(dir);
},

async getCompleteItems(): Promise<CompleteItem[]> {
async getCompleteItems(fromNormalU: unknown): Promise<CompleteItem[]> {
const fromNormal = u.ensure(fromNormalU, is.Boolean);
const filetype = await op.filetype.get(denops);
return (await getSnippets(denops, filetype)).flatMap((snippet) =>
return (await getSnippets(denops, filetype, fromNormal)).flatMap((snippet) =>
snippet.prefix.map((prefix) => ({
word: prefix,
kind: "Snippet",
Expand Down

0 comments on commit 13e4933

Please sign in to comment.