Code reference detail
fuzzy.rs
crates/reqlan-search/tests/fuzzy.rs
| Idea | Status | Tags | Summary | Katz |
|---|---|---|---|---|
| analytical_rust_port | in-progress | Port ["../core-architecture.rq".analytical_package] to Rust: lexer, parser ( index path ), extractor, SQLite index, search, and export. `@reqlan/analytical` remains the published JS facade ( `createAnalysisRuntime` / `AnalysisApi` / Zustand host state ). Native work lives in a `crates/` Cargo workspace and ships as per-architecture binaries per [distribution.rust_binary_distribution]. The editor language server is [lsp_rust.language_server_rust]. This analytical port does not replace that process. Component plans: [rust_crate_layout], [lexer_rust], [parser_rust], [parser_align], [indexer.indexer_rust], [search_rust], [export_rust], [native_bridge], [cutover]. | 0.243 | |
| search_rust | done | Port [search_reqs.fuzzy_search] ( separator-insensitive ranking ), [search_reqs.contextual_search] ( hop-distance rerank ), and [search_reqs.semantic_search] into `reqlan-search`. Same `AnalysisApi.searchRequirements` / `--context` contract ( [cli.commands] ). Activity-bar idea search uses `WorkspaceIndexRuntime.fuzzy_search` / napi `NativeWorkspaceIndex.fuzzySearch` so ranking stays next to rusqlite and only capped hits cross into JS. Mixed list includes indexed `.rq` file-name hits ( `kind` `file` ) and pages with `offset` / `limit` ( `truncated` ). Client-side highlight helpers used by webviews may stay in the TS `./fuzzy-search` export until a shared WASM / JS copy is needed. | 0.137 | |
| file_search | done | Rank indexed `.rq` files and comment-bearing code files by basename, stem, and path using the same separator-insensitive matching as [fuzzy_search] / [fuzzy_search_whitespace]. Hits use kind `file`; id is the indexed file URI; name is the basename; line start is 0. Empty query does not dump the file catalog. Mixed into [fuzzy_search] so one list ranks ideas and files together. Code files are those persisted by ["../indexer/indexer.rq".index_code_files]. Surfaces: native `fuzzy_search` via [native_workspace_index], ["../extension/local-context/activitybar-panels/search.rq".search_pane_file_hits]. ["../cli/click.rq".click_input] uses this mix when click has no exact match. | 0.244 | |
| fuzzy_search | done | Quick ranked idea search by name, summary, and tags. Separator and word-order behaviour: [fuzzy_search_whitespace]. Also supports prefix, substring, and character-subsequence ( fuzzy ) ranking. Skips ideaset container rows; empty query returns all non-ideaset ideas ( callers may require a non-empty query ). Ranking engine: ["./rust_port.rq".search_rust] `reqlan-search` ( `fuzzy_search` / `search_ideas` ). Also returns [file_search] hits mixed into the same ranked list ( kind `file` ). Pagination: [fuzzy_search_pages]. Activity-bar search calls [native_workspace_index] `NativeWorkspaceIndex.fuzzySearch` so the host never copies the idea catalog into JS. Client-side highlight helpers stay in [fuzzy_search_impl]. | 0.268 | |
| fuzzy_search_pages | done | [fuzzy_search] accepts `offset` + `limit` over the already-ranked mixed idea + file list. `truncated` is true when more hits exist after the returned page ( callers show `{n}+` rather than a full count ). Used by ["../extension/local-context/activitybar-panels/search.rq".search_pane_load_more]. | 0.097 | |
| fuzzy_search_whitespace | done | Matching treats `_`, `-`, `.` / `...` / `…`, and whitespace as interchangeable separators so queries like `cli package`, `cli_package`, and `cli-package` hit the same idea. Prefers query word order, but still matches when words are reordered or when intermediate name words are missing ( e. g. `package cli` → `cli_package`, `search actions` → `search_code_actions` ). Extends [fuzzy_search]; implementation [fuzzy_search_impl]. | 0.117 | |
| search | Search over the requirement graph — find ideas by name, body, tags, and related signals. Surfaces: [fuzzy_search], [file_search], [contextual_search], [semantic_search], [katz_search]. Consumed by CLI `reqlan search`, MCP / chat tools, Ideas Summary, and the activity-bar search pane. Rust ranking engine: ["./rust_port.rq".search_rust]. | 0.046 | ||
| command_palette | done | Extension commands should be available via the vscode command palette and configurable keyboard shortcuts. Command titles should not repeat the category prefix; use category " reqlan " with plain titles so the palette shows " Reqlan: List All Ideas ", not " Reqlan: Reqlan:... " or " RQ: RQ:... ". Commands belong to product domains; this file is the palette naming hub under host lifecycle. Agent: [agent_ai.add_to_chat]. Index host: [index_diagnostics.open_index_diagnostics]. Diff: [diff_webview]. Export: [export_functions.export_html] and siblings. Mutation: [refactor_support], [barrel_page], [decompose]. Language: [search_code_actions], [code_actions_ignore_error], [create_idea_below_idea_containing_unresolved_reference_under_cursor]. | 0.087 | |
| search_code_actions | done | when cursor is in a `[reference]`, there shouls be a code action to search for references to that idea. it should also allow wrapping a selected string, or the word at the cursor when in idea-body prose, as a new `[reference]`. it should open up a webview modal that shows a search dialog that allows the user to search for potential references. the search menu should preserve / show the context of the would-be reference: the rest of the containing idea, with styling, and with the selected text pulsing / styled prominently. it should support fuzzy / partial searching via [search_analysis.fuzzy_search]. it should list the closest matches in a paginated view. selecting the idea should fill / replace the reference ( or wrap the selection as `[name]` ) and an import ( if required ) appropiately The lightbulb command ( `reqlan.searchReference` ) is arg-less because VS Code caches arg-bearing code-action commands and may dispose them on refresh ( error text like Actual command not found ). At invoke time the extension resolves the site via LSP `reqlan/referenceSearchSite`, or a local parse of the active editor when the language client is not yet running — it must not fail with a false " language server is not ready " when a local site can be resolved. | 0.116 | |
| search_pane | done | Workspace idea search in the activity bar — find rq ideas by name, summary, or tags without leaving the sidebar. Complements the modal from [commands.search_code_actions]; this pane stays open for repeated lookups and inserts. Implemented by [SearchPane] under [CollapsiblePane]; host wire in [activity_bar_webview] / [activity_bar_messages] / [app_state]. [search_pane_query] [search_pane_layout] [search_pane_results] [search_pane_open_live_file] [search_pane_load_more] [search_pane_file_hits] [search_pane_insert_reference] [search_add_to_chat] [search_pane_advanced] [search_pane_empty_query] [search_pane_scoped_status] [search_progress] [search_pane_seed] [search_pane_match_highlighting] | 0.176 | |
| search_pane_file_hits | done | [search_pane] mixes [core_search.file_search] hits ( kind `file` ) into the ranked list with ideas. Click opens the file at line 0. File hits do not offer Insert ref or Pin ( those are idea actions ). Empty-state and placeholder copy mention files. | 0.115 | |
| search_pane_load_more | done | When ranked hits exceed the visible page, [search_pane] shows an exceeded-count label ( `40+ matches`, or `{n}+ matches` after further pages ) instead of a full total, and a **Show more** control at the bottom of the list that fetches the next page and appends. A new query resets to the first page. Uses [core_search.fuzzy_search_pages] ( `offset` + `truncated` ). | 0.095 | |
| search_pane_match_highlighting | done | The [search_pane_results] list highlights the parts of name, path, and summary that matched the query via [SearchHighlight]. Resilient to [core_search.fuzzy_search] / [core_search.fuzzy_search_whitespace]: contiguous and separator-insensitive spans, token prefixes / part matches, reordered words, and character-subsequence ( fuzzy / acronym ) marks on short fields such as the idea name — not scattered letters in long summaries. | 0.063 | |
| search_pane_query | done | [search_pane] search input posts a debounced host query. Ranking uses [core_search.fuzzy_search] in the native search module ( `NativeWorkspaceIndex.fuzzySearch` ); separator-insensitive `_` / `-` / `...` / whitespace. File-name hits: [search_pane_file_hits] / [core_search.file_search]. Pages: [search_pane_load_more] / [core_search.fuzzy_search_pages]. Highlighting stays in the TS `./fuzzy-search` export. | 0.063 | |
| local_graph_view | The activity bar provides a local graph view scoped to the current file or selected idea. The local graph should show direct and optionally indirect references with a configurable depth. | 0.055 | ||
| performance | done | Sidebar webviews share the same constraints as [graph_lib.webview_threading]. - The HTML / Svelte shell paints before index discovery begins; the post-paint `ready` handshake starts indexing. - Require the host-matching core engine at activate; do not embed a sql. js vendor in the activation-critical host bundle. - Default neighbourhood slices; never load the full workspace graph into a pane. - Debounce editor selection and cursor events before rebuilding slices. - Lazy-mount cytoscape only for visible sub-panes; destroy when collapsed or hidden. - Reuse [indexer.local_graph_analysis] and graph query builders rather than ad-hoc index walks in the webview. - Interactive actions ( `openIdea`, insert ref, add to chat, phonebook / Ideas Summary links ) are handled on a priority path: they cancel in-flight search / refresh work and briefly quiet editor-driven rebuilds so subsequent clicks stay snappy. - Idea search scoring runs in a worker thread with a preloaded catalog; catalog load yields so it cannot monopolize the host. - Link navigation must stay snappy once a target is already resolved: [link_open_decoupled_from_git], [link_open_interactive_quiet], [lean_resolved_open], [git_focus_cache_by_head]. | 0.040 |
Reference labels
"../../../../crates/reqlan-search/tests/fuzzy.rs", "../../../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated", "../../../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas", "../../../crates/reqlan-search/tests/fuzzy.rs", "../../crates/reqlan-search/tests/fuzzy.rs:collapses_underscore_hyphen_dots_ellipsis_and_whitespace", "../../crates/reqlan-search/tests/fuzzy.rs:fuzzy_search_reads_sqlite_and_returns_ranked_hits", "../../crates/reqlan-search/tests/fuzzy.rs:matches_across_separator_substitutions", "../../crates/reqlan-search/tests/fuzzy.rs:matches_reordered_and_partial_word_queries", "../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated", "../../crates/reqlan-search/tests/fuzzy.rs:ranks_exact_and_prefix_matches_ahead_of_subsequence_fuzzy_hits", "../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas", ../../../../crates/reqlan-search/tests/fuzzy.rs, ../../../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated, ../../../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas, ../../../crates/reqlan-search/tests/fuzzy.rs, ../../crates/reqlan-search/tests/fuzzy.rs:collapses_underscore_hyphen_dots_ellipsis_and_whitespace, ../../crates/reqlan-search/tests/fuzzy.rs:fuzzy_search_reads_sqlite_and_returns_ranked_hits, ../../crates/reqlan-search/tests/fuzzy.rs:matches_across_separator_substitutions, ../../crates/reqlan-search/tests/fuzzy.rs:matches_reordered_and_partial_word_queries, ../../crates/reqlan-search/tests/fuzzy.rs:pages_ranked_hits_with_offset_and_truncated, ../../crates/reqlan-search/tests/fuzzy.rs:ranks_exact_and_prefix_matches_ahead_of_subsequence_fuzzy_hits, ../../crates/reqlan-search/tests/fuzzy.rs:ranks_file_name_hits_with_ideas