Skip to content

Commit

Permalink
Update types
Browse files Browse the repository at this point in the history
  • Loading branch information
Shougo committed Jul 27, 2023
1 parent 2911746 commit 8c7a510
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 25 deletions.
53 changes: 35 additions & 18 deletions denops/ddu/ddu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import {
SourceOptions,
TreePath,
UiOptions,
UserColumn,
UserFilter,
UserOptions,
UserSource,
Expand Down Expand Up @@ -1496,16 +1497,17 @@ export class Ddu {
BaseUiParams,
]
> {
if (!this.loader.getUi(this.options.name, this.options.ui)) {
await this.loader.autoload(denops, "ui", this.options.ui);
const userUi = convertUserString(this.options.ui);
if (!this.loader.getUi(this.options.name, userUi.name)) {
await this.loader.autoload(denops, "ui", userUi.name);
}

const ui = this.loader.getUi(this.options.name, this.options.ui);
const ui = this.loader.getUi(this.options.name, userUi.name);
if (!ui) {
if (this.options.ui.length !== 0) {
if (userUi.name.length !== 0) {
await denops.call(
"ddu#util#print_error",
`Not found ui: "${this.options.ui}"`,
`Not found ui: "${userUi.name}"`,
);
}
return [
Expand Down Expand Up @@ -1623,23 +1625,25 @@ export class Ddu {

async getColumn(
denops: Denops,
name: string,
userColumn: UserColumn,
): Promise<
[
BaseColumn<BaseColumnParams> | undefined,
ColumnOptions,
BaseColumnParams,
]
> {
if (!this.loader.getColumn(this.options.name, name)) {
await this.loader.autoload(denops, "column", name);
userColumn = convertUserString(userColumn);

if (!this.loader.getColumn(this.options.name, userColumn.name)) {
await this.loader.autoload(denops, "column", userColumn.name);
}

const column = this.loader.getColumn(this.options.name, name);
const column = this.loader.getColumn(this.options.name, userColumn.name);
if (!column) {
await denops.call(
"ddu#util#print_error",
`Not found column: ${name}`,
`Not found column: ${userColumn.name}`,
);
return [
undefined,
Expand All @@ -1648,7 +1652,11 @@ export class Ddu {
];
}

const [columnOptions, columnParams] = columnArgs(column, this.options);
const [columnOptions, columnParams] = columnArgs(
column,
this.options,
userColumn,
);
await checkColumnOnInit(column, denops, columnOptions, columnParams);

return [column, columnOptions, columnParams];
Expand Down Expand Up @@ -1754,7 +1762,7 @@ export class Ddu {

private async callColumns(
denops: Denops,
columns: string[],
columns: UserColumn[],
items: DduItem[],
) {
if (columns.length === 0) {
Expand All @@ -1773,10 +1781,12 @@ export class Ddu {
length: number;
};
const cachedColumns: Record<string, CachedColumn> = {};
for (const columnName of columns) {
for (
const userColumn of columns.map((column) => convertUserString(column))
) {
const [column, columnOptions, columnParams] = await this.getColumn(
denops,
columnName,
userColumn,
);
if (!column) {
continue;
Expand All @@ -1791,7 +1801,7 @@ export class Ddu {
items,
});

cachedColumns[columnName] = {
cachedColumns[userColumn.name] = {
column,
columnOptions,
columnParams,
Expand All @@ -1801,12 +1811,14 @@ export class Ddu {

for (const item of items) {
let startCol = 1;
for (const columnName of columns) {
if (!cachedColumns[columnName]) {
for (
const userColumn of columns.map((column) => convertUserString(column))
) {
if (!cachedColumns[userColumn.name]) {
continue;
}

const cachedColumn = cachedColumns[columnName];
const cachedColumn = cachedColumns[userColumn.name];
const text = await cachedColumn.column.getText({
denops,
context: this.context,
Expand Down Expand Up @@ -1996,13 +2008,17 @@ function columnArgs<
>(
column: BaseColumn<Params>,
options: DduOptions,
userColumn: UserColumn,
): [ColumnOptions, BaseColumnParams] {
userColumn = convertUserString(userColumn);

const o = foldMerge(
mergeColumnOptions,
defaultColumnOptions,
[
options.columnOptions["_"],
options.columnOptions[column.name],
userColumn?.options,
],
);
const p = foldMerge(
Expand All @@ -2012,6 +2028,7 @@ function columnArgs<
column?.params(),
options.columnParams["_"],
options.columnParams[column.name],
userColumn?.params,
],
);
return [o, p];
Expand Down
16 changes: 14 additions & 2 deletions denops/ddu/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ export type Context = {
winId: number;
};

export type UserUi = UiName | {
name: UiName;
options?: Partial<UiOptions>;
params?: Partial<BaseUiParams>;
};

export type UserSource = SourceName | {
name: SourceName;
options?: Partial<SourceOptions>;
Expand All @@ -66,6 +72,12 @@ export type UserFilter = FilterName | {
params?: Partial<BaseFilterParams>;
};

export type UserColumn = ColumnName | {
name: ColumnName;
options?: Partial<ColumnOptions>;
params?: Partial<BaseColumnParams>;
};

export type SourceInfo = {
name: SourceName;
index: number;
Expand Down Expand Up @@ -95,7 +107,7 @@ export type DduOptions = {
sourceParams: Record<SourceName, Partial<BaseSourceParams>>;
sources: UserSource[];
sync: boolean;
ui: UiName;
ui: UserUi;
uiOptions: Record<UiName, Partial<UiOptions>>;
uiParams: Record<UiName, Partial<BaseUiParams>>;
unique: boolean;
Expand All @@ -121,7 +133,7 @@ export type SourceOptions = {
args: ActionArguments<BaseActionParams>,
) => Promise<ActionFlags | ActionResult>)
>;
columns: ColumnName[];
columns: UserColumn[];
converters: UserFilter[];
defaultAction: string;
ignoreCase: boolean;
Expand Down
25 changes: 20 additions & 5 deletions doc/ddu.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
*ddu.txt* Dark deno-powered UI framework for neovim/Vim8
*ddu.txt* Dark deno-powered UI framework for neovim/Vim

Author: Shougo <Shougo.Matsu at gmail.com>
License: MIT license
Expand Down Expand Up @@ -227,8 +227,15 @@ sync (boolean)
Default: v:false

*ddu-option-ui*
ui (string)
Specify UI name.
ui (string | dictionary)
Specify UI name or elements which are formatted as:
>
#{
name: {ui-name},
options: {ui-options},
params: {ui-params},
}
<
If it is empty string, it is ignored.
NOTE: You must set the option in the first.

Expand Down Expand Up @@ -669,8 +676,16 @@ actions (Record<string, function>)
Overwrites source actions.

*ddu-source-option-columns*
columns (string[])
It is a list of registered column names.
columns (string[] | dictionary[])
It is a list of registered column names or elements which are
formatted as:
>
#{
name: {column-name},
options: {column-options},
params: {column-params},
}
<
Please see |ddu-columns|.
Items will be processed in the order you specify here.

Expand Down

0 comments on commit 8c7a510

Please sign in to comment.