#VariousComplements https://github.com/tadashi-aikawa/obsidian-various-complements-plugin/issues/73 [[Suggest Internal Links With Alias (Issue 64)]]の続編。 ## 前提 - `John Gear`というNoteがある - ↑は`John`というエイリアスをもつ ## 事象 - `John`と入力すると`[[John Gear]]`==のみ==がサジェストされる ## 期待値 - `[[John Gear|John]]`と`[[John Gear]]`の==両方==がサジェストされる - 先頭は`[[John Gear|John]]`の方が良い ## 原因 - `suggester`ではエイリアスを含むNoteは1つのWordオブジェクトとして扱われる - `value = John Gear`、`aliases = [John]` になる - `judge`ではエイリアスでない方が優先されるため`John Gear`が選出される - そのためエイリアスの`John`が採用されず`John Gear`のみが表示される ## 解決方法 いくつか考えられる。 ### `judge`で`Judgement[]`を返却してflat化する - メリット - うまくいけば最も影響範囲は小さい - デメリット - flat化の処理が全候補にかかるので、サジェストのパフォーマンスが落ちる - エイリアスの扱い(設定)を深層のインターフェースまで伝播させる必要がある - Partialの有無で2か所に修正が必要 ### `InternalLinkWordProvider`の`refreshWords`でエイリアスの数だけ候補を作る - メリット - サジェストのパフォーマンスは落ちない - indexingのパフォーマンスもそこまで落ちない - 落ちてもファイル切り替え時だけなので体感の操作性には問題ない - デメリット - Wordの型定義を変更する必要がある - [[内部リンク]]のエイリアスである旨が必要 - ただ、そもそも今の型定義が歪なので実はメリットかも.. - `internalLink: boolean`をEnumの`type`とかにしてもいいかも 🤔 - 検索ヒット用のエイリアスと、表示用のエイリアスは違う言葉にした方がいいかも.. - [[内部リンク]]でいうと - 絵文字をカットしたファイル名 => 検索用 - Noteのalias => 表示用 - ともいえる.. がこれはオプション次第で挙動も変わるのか.. ==こちらの方がよさそう== ## 実装について ### `Word`に必要なもの - value - 補完する文字列 - description - 補足する説明 - aliases - 検索でひっかけるだけのもの - 表示には使わない - [x] internalLink - [[内部リンク]]かどうかのフラグ - ==今回削除したい== - matchedAlias - 候補に選ばれたとき、aliaseでヒットした場合はその文字が入る - エイリアスを挿入するのに必要 - ==今回、不要であることが分かれば削除する可能性がある== - alias候補をWordとして追加し、==originをWordに加えれば==それを元に作成できそう - ==[[内部リンク]]のエイリアスから作成されたWordである旨== はWordに必要 - offset - multi-words completionで補完位置をずらすため必要な情報 - [x] ==type== - ==今回追加する== - 生成元のタイプ - currentFile - customDictionary - internalLink ### suggestionのアイコンとして出すもの - currentFile - customDictionary - internalLink - internalLink + alias ## その他 ### [[🦉Various Complements]]のソートロジック 1. `value`の長さが短い方が優先 2. `internalLink`が優先 3. `alias`マッチでない方が優先 various