Skip to content

Commit 0100ab6

Browse files
committed
WIP: Add getbufinfo() helper function
- TODO: Write JSDoc - TODO: Write details here
1 parent 5892973 commit 0100ab6

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed

helper/getbufinfo.ts

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import type { Denops } from "../mod.ts";
2+
import type { BufInfo } from "../function/types.ts";
3+
import type { BufNameArg, GetBufInfoDictArg } from "../function/buffer.ts";
4+
5+
/**
6+
* TODO: write
7+
*/
8+
export function getbufinfo(
9+
denops: Denops,
10+
buf?: BufNameArg,
11+
): Promise<BufInfo[]>;
12+
export function getbufinfo(
13+
denops: Denops,
14+
dict?: GetBufInfoDictArg,
15+
): Promise<BufInfo[]>;
16+
export async function getbufinfo(
17+
denops: Denops,
18+
...args: unknown[]
19+
): Promise<BufInfo[]> {
20+
const bufinfos = await denops.eval(
21+
"map(call('getbufinfo', l:args), {_, v -> filter(v, {k -> k !=# 'variables'})})",
22+
{
23+
args: args,
24+
},
25+
) as Record<
26+
keyof BufInfo,
27+
unknown
28+
>[];
29+
return bufinfos.map((bufinfo) => ({
30+
...bufinfo,
31+
changed: !!bufinfo.changed,
32+
hidden: !!bufinfo.hidden,
33+
listed: !!bufinfo.listed,
34+
loaded: !!bufinfo.loaded,
35+
} as unknown as BufInfo));
36+
}

helper/getbufinfo_test.ts

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import { getbufinfo } from "./getbufinfo.ts";
2+
import { assertEquals, assertFalse } from "@std/assert";
3+
import { assert, is } from "@core/unknownutil";
4+
import { test } from "@denops/test";
5+
import type { BufInfo } from "../function/types.ts";
6+
7+
test({
8+
mode: "all",
9+
name: "buffer",
10+
fn: async (denops, t) => {
11+
await t.step({
12+
name: "getbufinfo()",
13+
fn: async () => {
14+
await denops.cmd("enew!");
15+
await denops.cmd("new foo");
16+
await denops.call("setline", 1, "abcdef");
17+
await denops.cmd("new bar");
18+
await denops.cmd("hide");
19+
await denops.cmd("new baz");
20+
await denops.cmd("bunload!");
21+
22+
const actual = await getbufinfo(denops);
23+
assert(actual, is.ArrayOf((x): x is BufInfo => is.Record(x)));
24+
assertEquals(actual.length, 4);
25+
assertEquals(
26+
actual.map(({ changed, hidden, listed, loaded }) => (
27+
{ changed, hidden, listed, loaded }
28+
)),
29+
[
30+
{
31+
// [No Name]
32+
changed: false,
33+
hidden: false,
34+
listed: true,
35+
loaded: true,
36+
},
37+
{
38+
// foo
39+
changed: true,
40+
hidden: false,
41+
listed: true,
42+
loaded: true,
43+
},
44+
{
45+
// bar
46+
changed: false,
47+
hidden: true,
48+
listed: true,
49+
loaded: true,
50+
},
51+
{
52+
// baz
53+
changed: false,
54+
hidden: false,
55+
listed: true,
56+
loaded: false,
57+
},
58+
],
59+
"boolean properties are invalid.",
60+
);
61+
},
62+
});
63+
await denops.cmd("1,$bwipeout!");
64+
65+
await t.step({
66+
name: "getbufinfo() will filter buffer-local variables",
67+
fn: async () => {
68+
await denops.cmd("enew!");
69+
await denops.cmd("let b:var = 0");
70+
71+
const actual = await getbufinfo(denops);
72+
assertEquals(actual.length, 1);
73+
assertFalse("variables" in actual[0]);
74+
},
75+
});
76+
},
77+
});

helper/mod.ts

+1
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ export * from "./expr_string.ts";
99
export * from "./input.ts";
1010
export * from "./keymap.ts";
1111
export * from "./load.ts";
12+
export * from "./getbufinfo.ts";

0 commit comments

Comments
 (0)