mirror of
https://github.com/NotAShelf/nvf.git
synced 2026-05-19 05:24:22 +00:00
deploy: e86a92e4b2
This commit is contained in:
parent
8f0cbcd36e
commit
9597734b09
81 changed files with 19 additions and 372087 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -1,298 +0,0 @@
|
||||||
const isWordBoundary = (char) =>
|
|
||||||
/[A-Z]/.test(char) || /[-_\/.]/.test(char) || /\s/.test(char);
|
|
||||||
|
|
||||||
const isCaseTransition = (prev, curr) => {
|
|
||||||
const prevIsUpper = prev.toLowerCase() !== prev;
|
|
||||||
const currIsUpper = curr.toLowerCase() !== curr;
|
|
||||||
return (
|
|
||||||
prevIsUpper && currIsUpper && prev.toLowerCase() !== curr.toLowerCase()
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const findBestSubsequenceMatch = (query, target) => {
|
|
||||||
const n = query.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0 || m === 0) return null;
|
|
||||||
|
|
||||||
const positions = [];
|
|
||||||
|
|
||||||
const memo = new Map();
|
|
||||||
const key = (qIdx, tIdx, gap) => `${qIdx}:${tIdx}:${gap}`;
|
|
||||||
|
|
||||||
const findBest = (qIdx, tIdx, currentGap) => {
|
|
||||||
if (qIdx === n) {
|
|
||||||
return { done: true, positions: [...positions], gap: currentGap };
|
|
||||||
}
|
|
||||||
|
|
||||||
const memoKey = key(qIdx, tIdx, currentGap);
|
|
||||||
if (memo.has(memoKey)) {
|
|
||||||
return memo.get(memoKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
let bestResult = null;
|
|
||||||
|
|
||||||
for (let i = tIdx; i < m; i++) {
|
|
||||||
if (target[i] === query[qIdx]) {
|
|
||||||
positions.push(i);
|
|
||||||
const gap = qIdx === 0 ? 0 : i - positions[positions.length - 2] - 1;
|
|
||||||
const newGap = currentGap + gap;
|
|
||||||
|
|
||||||
if (newGap > m) {
|
|
||||||
positions.pop();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = findBest(qIdx + 1, i + 1, newGap);
|
|
||||||
positions.pop();
|
|
||||||
|
|
||||||
if (result && (!bestResult || result.gap < bestResult.gap)) {
|
|
||||||
bestResult = result;
|
|
||||||
if (result.gap === 0) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memo.set(memoKey, bestResult);
|
|
||||||
return bestResult;
|
|
||||||
};
|
|
||||||
|
|
||||||
const result = findBest(0, 0, 0);
|
|
||||||
if (!result) return null;
|
|
||||||
|
|
||||||
const consecutive = (() => {
|
|
||||||
let c = 1;
|
|
||||||
for (let i = 1; i < result.positions.length; i++) {
|
|
||||||
if (result.positions[i] === result.positions[i - 1] + 1) {
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
})();
|
|
||||||
|
|
||||||
return {
|
|
||||||
positions: result.positions,
|
|
||||||
consecutive,
|
|
||||||
score: calculateMatchScore(query, target, result.positions, consecutive),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const calculateMatchScore = (query, target, positions, consecutive) => {
|
|
||||||
const n = positions.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0) return 0;
|
|
||||||
|
|
||||||
let score = 1.0;
|
|
||||||
|
|
||||||
const startBonus = (m - positions[0]) / m;
|
|
||||||
score += startBonus * 0.5;
|
|
||||||
|
|
||||||
let gapPenalty = 0;
|
|
||||||
for (let i = 1; i < n; i++) {
|
|
||||||
const gap = positions[i] - positions[i - 1] - 1;
|
|
||||||
if (gap > 0) {
|
|
||||||
gapPenalty += Math.min(gap / m, 1.0) * 0.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score -= gapPenalty;
|
|
||||||
|
|
||||||
const consecutiveBonus = consecutive / n;
|
|
||||||
score += consecutiveBonus * 0.3;
|
|
||||||
|
|
||||||
let boundaryBonus = 0;
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const char = target[positions[i]];
|
|
||||||
if (i === 0 || isWordBoundary(char)) {
|
|
||||||
boundaryBonus += 0.05;
|
|
||||||
}
|
|
||||||
if (i > 0) {
|
|
||||||
const prevChar = target[positions[i - 1]];
|
|
||||||
if (isCaseTransition(prevChar, char)) {
|
|
||||||
boundaryBonus += 0.03;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score = Math.min(1.0, score + boundaryBonus);
|
|
||||||
|
|
||||||
const lengthPenalty = Math.abs(query.length - n) / Math.max(query.length, m);
|
|
||||||
score -= lengthPenalty * 0.2;
|
|
||||||
|
|
||||||
return Math.max(0, Math.min(1.0, score));
|
|
||||||
};
|
|
||||||
|
|
||||||
const fuzzyMatch = (query, target) => {
|
|
||||||
const lowerQuery = query.toLowerCase();
|
|
||||||
const lowerTarget = target.toLowerCase();
|
|
||||||
|
|
||||||
if (lowerQuery.length === 0) return null;
|
|
||||||
if (lowerTarget.length === 0) return null;
|
|
||||||
|
|
||||||
if (lowerTarget === lowerQuery) {
|
|
||||||
return 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lowerTarget.includes(lowerQuery)) {
|
|
||||||
const ratio = lowerQuery.length / lowerTarget.length;
|
|
||||||
return 0.8 + ratio * 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
const match = findBestSubsequenceMatch(lowerQuery, lowerTarget);
|
|
||||||
if (!match) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.min(1.0, match.score);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.onmessage = function (e) {
|
|
||||||
const { messageId, type, data } = e.data;
|
|
||||||
|
|
||||||
const respond = (type, data) => {
|
|
||||||
self.postMessage({ messageId, type, data });
|
|
||||||
};
|
|
||||||
|
|
||||||
const respondError = (error) => {
|
|
||||||
self.postMessage({
|
|
||||||
messageId,
|
|
||||||
type: "error",
|
|
||||||
error: error.message || String(error),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (type === "tokenize") {
|
|
||||||
const text = typeof data === "string" ? data : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const tokens = words.filter((word) => word.length > 2);
|
|
||||||
const uniqueTokens = Array.from(new Set(tokens));
|
|
||||||
respond("tokens", uniqueTokens);
|
|
||||||
} else if (type === "search") {
|
|
||||||
const { query, limit = 10 } = data;
|
|
||||||
|
|
||||||
if (!query || typeof query !== "string") {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawQuery = query.toLowerCase();
|
|
||||||
const text = typeof query === "string" ? query : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const searchTerms = words.filter((word) => word.length > 2);
|
|
||||||
|
|
||||||
let documents = [];
|
|
||||||
if (typeof data.documents === "string") {
|
|
||||||
documents = JSON.parse(data.documents);
|
|
||||||
} else if (Array.isArray(data.documents)) {
|
|
||||||
documents = data.documents;
|
|
||||||
} else if (typeof data.transferables === "string") {
|
|
||||||
documents = JSON.parse(data.transferables);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.isArray(documents) || documents.length === 0) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const useFuzzySearch = rawQuery.length >= 3;
|
|
||||||
|
|
||||||
if (searchTerms.length === 0 && rawQuery.length < 3) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const pageMatches = new Map();
|
|
||||||
|
|
||||||
// Pre-compute lower-case strings for each document
|
|
||||||
const processedDocs = documents.map((doc, docId) => {
|
|
||||||
const title = typeof doc.title === "string" ? doc.title : "";
|
|
||||||
const content = typeof doc.content === "string" ? doc.content : "";
|
|
||||||
|
|
||||||
return {
|
|
||||||
docId,
|
|
||||||
doc,
|
|
||||||
lowerTitle: title.toLowerCase(),
|
|
||||||
lowerContent: content.toLowerCase(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// First pass: Score pages with fuzzy matching
|
|
||||||
processedDocs.forEach(({ docId, doc, lowerTitle, lowerContent }) => {
|
|
||||||
let match = pageMatches.get(docId);
|
|
||||||
if (!match) {
|
|
||||||
match = { doc, pageScore: 0, matchingAnchors: [] };
|
|
||||||
pageMatches.set(docId, match);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyTitleScore = fuzzyMatch(rawQuery, lowerTitle);
|
|
||||||
if (fuzzyTitleScore !== null) {
|
|
||||||
match.pageScore += fuzzyTitleScore * 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fuzzyContentScore = fuzzyMatch(rawQuery, lowerContent);
|
|
||||||
if (fuzzyContentScore !== null) {
|
|
||||||
match.pageScore += fuzzyContentScore * 30;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Token-based exact matching
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (lowerTitle.includes(term)) {
|
|
||||||
match.pageScore += lowerTitle === term ? 20 : 10;
|
|
||||||
}
|
|
||||||
if (lowerContent.includes(term)) {
|
|
||||||
match.pageScore += 2;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Second pass: Find matching anchors
|
|
||||||
pageMatches.forEach((match) => {
|
|
||||||
const doc = match.doc;
|
|
||||||
if (
|
|
||||||
!doc.anchors ||
|
|
||||||
!Array.isArray(doc.anchors) ||
|
|
||||||
doc.anchors.length === 0
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
doc.anchors.forEach((anchor) => {
|
|
||||||
if (!anchor || !anchor.text) return;
|
|
||||||
|
|
||||||
const anchorText = anchor.text.toLowerCase();
|
|
||||||
let anchorMatches = false;
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyScore = fuzzyMatch(rawQuery, anchorText);
|
|
||||||
if (fuzzyScore !== null && fuzzyScore >= 0.4) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!anchorMatches) {
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (anchorText.includes(term)) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (anchorMatches) {
|
|
||||||
match.matchingAnchors.push(anchor);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const results = Array.from(pageMatches.values())
|
|
||||||
.filter((m) => m.pageScore > 5)
|
|
||||||
.sort((a, b) => b.pageScore - a.pageScore)
|
|
||||||
.slice(0, limit);
|
|
||||||
|
|
||||||
respond("results", results);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
respondError(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
|
@ -1,157 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Known Issues and Quirks</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input type="text" id="search-input" placeholder="Search..." />
|
|
||||||
<div id="search-results" class="search-results"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav class="sidebar">
|
|
||||||
<details class="sidebar-section" data-section="docs" open>
|
|
||||||
<summary>Documents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details class="sidebar-section" data-section="toc" open>
|
|
||||||
<summary>Contents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul class="toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content"><html><head></head><body><h1 id="ch-known-issues-quirks">Known Issues and Quirks</h1>
|
|
||||||
<p>At times, certain plugins and modules may refuse to play nicely with your setup,
|
|
||||||
be it a result of generating Lua from Nix, or the state of packaging. This page,
|
|
||||||
in turn, will list any known modules or plugins that are known to misbehave, and
|
|
||||||
possible workarounds that you may apply.</p>
|
|
||||||
<h2 id="ch-quirks-nodejs">NodeJS</h2>
|
|
||||||
<h3 id="sec-eslint-plugin-prettier">eslint-plugin-prettier</h3>
|
|
||||||
<p>When working with NodeJS, which is <em>obviously</em> known for its meticulous
|
|
||||||
standards, most things are bound to work as expected but some projects, tools
|
|
||||||
and settings may fool the default configurations of tools provided by <strong>nvf</strong>.</p>
|
|
||||||
<p>If <a href="https://github.com/prettier/eslint-plugin-prettier">eslint-plugin-prettier</a> or similar is included, you might get a situation
|
|
||||||
where your Eslint configuration diagnoses your formatting according to its own
|
|
||||||
config (usually <code>.eslintrc.js</code>). The issue there is your formatting is made via
|
|
||||||
prettierd.</p>
|
|
||||||
<p>This results in auto-formatting relying on your prettier configuration, while
|
|
||||||
your Eslint configuration diagnoses formatting "issues" while it's
|
|
||||||
<a href="https://prettier.io/docs/en/comparison.html">not supposed to</a>. In the end, you get discrepancies between what your editor
|
|
||||||
does and what it wants.</p>
|
|
||||||
<p>Solutions are:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Don't add a formatting config to Eslint, instead separate Prettier and
|
|
||||||
Eslint.</li>
|
|
||||||
<li>PR the repo in question to add an ESLint formatter, and configure <strong>nvf</strong> to
|
|
||||||
use it.</li>
|
|
||||||
</ol>
|
|
||||||
<h2 id="ch-bugs-suggestions">Bugs & Suggestions</h2>
|
|
||||||
<p>Some quirks are not exactly quirks, but bugs in the module system. If you notice
|
|
||||||
any issues with <strong>nvf</strong>, or this documentation, then please consider reporting
|
|
||||||
them over at the <a href="https://github.com/notashelf/nvf/issues">issue tracker</a>. Issues tab, in addition to the
|
|
||||||
<a href="https://github.com/notashelf/nvf/discussions">discussions tab</a> is a good place as any to request new features.</p>
|
|
||||||
<p>You may also consider submitting bug fixes, feature additions and upstreamed
|
|
||||||
changes that you think are critical over at the <a href="https://github.com/notashelf/nvf/pulls">pull requests tab</a>.</p>
|
|
||||||
</body></html></main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<aside class="page-toc">
|
|
||||||
<nav class="page-toc-nav">
|
|
||||||
<h3>On this page</h3>
|
|
||||||
<ul class="page-toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,140 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>NVF - Search</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
id="search-results"
|
|
||||||
class="search-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav id="sidebar" class="sidebar">
|
|
||||||
<div class="docs-nav">
|
|
||||||
<h2>Documents</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toc">
|
|
||||||
<h2>Contents</h2>
|
|
||||||
<ul class="toc-list">
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
<h1>Search</h1>
|
|
||||||
<div class="search-page">
|
|
||||||
<div class="search-form">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-page-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
autofocus
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="search-keyboard-hints" role="note" aria-label="Keyboard shortcuts">
|
|
||||||
<span class="hint-item"><kbd>↑</kbd> <kbd>↓</kbd> to navigate</span>
|
|
||||||
<span class="hint-item"><kbd>Enter</kbd> to select</span>
|
|
||||||
<span class="hint-item"><kbd>Esc</kbd> to clear</span>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
id="search-page-results"
|
|
||||||
class="search-page-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div class="footnotes-container">
|
|
||||||
<!-- Footnotes will be appended here -->
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -1,298 +0,0 @@
|
||||||
const isWordBoundary = (char) =>
|
|
||||||
/[A-Z]/.test(char) || /[-_\/.]/.test(char) || /\s/.test(char);
|
|
||||||
|
|
||||||
const isCaseTransition = (prev, curr) => {
|
|
||||||
const prevIsUpper = prev.toLowerCase() !== prev;
|
|
||||||
const currIsUpper = curr.toLowerCase() !== curr;
|
|
||||||
return (
|
|
||||||
prevIsUpper && currIsUpper && prev.toLowerCase() !== curr.toLowerCase()
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const findBestSubsequenceMatch = (query, target) => {
|
|
||||||
const n = query.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0 || m === 0) return null;
|
|
||||||
|
|
||||||
const positions = [];
|
|
||||||
|
|
||||||
const memo = new Map();
|
|
||||||
const key = (qIdx, tIdx, gap) => `${qIdx}:${tIdx}:${gap}`;
|
|
||||||
|
|
||||||
const findBest = (qIdx, tIdx, currentGap) => {
|
|
||||||
if (qIdx === n) {
|
|
||||||
return { done: true, positions: [...positions], gap: currentGap };
|
|
||||||
}
|
|
||||||
|
|
||||||
const memoKey = key(qIdx, tIdx, currentGap);
|
|
||||||
if (memo.has(memoKey)) {
|
|
||||||
return memo.get(memoKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
let bestResult = null;
|
|
||||||
|
|
||||||
for (let i = tIdx; i < m; i++) {
|
|
||||||
if (target[i] === query[qIdx]) {
|
|
||||||
positions.push(i);
|
|
||||||
const gap = qIdx === 0 ? 0 : i - positions[positions.length - 2] - 1;
|
|
||||||
const newGap = currentGap + gap;
|
|
||||||
|
|
||||||
if (newGap > m) {
|
|
||||||
positions.pop();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = findBest(qIdx + 1, i + 1, newGap);
|
|
||||||
positions.pop();
|
|
||||||
|
|
||||||
if (result && (!bestResult || result.gap < bestResult.gap)) {
|
|
||||||
bestResult = result;
|
|
||||||
if (result.gap === 0) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memo.set(memoKey, bestResult);
|
|
||||||
return bestResult;
|
|
||||||
};
|
|
||||||
|
|
||||||
const result = findBest(0, 0, 0);
|
|
||||||
if (!result) return null;
|
|
||||||
|
|
||||||
const consecutive = (() => {
|
|
||||||
let c = 1;
|
|
||||||
for (let i = 1; i < result.positions.length; i++) {
|
|
||||||
if (result.positions[i] === result.positions[i - 1] + 1) {
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
})();
|
|
||||||
|
|
||||||
return {
|
|
||||||
positions: result.positions,
|
|
||||||
consecutive,
|
|
||||||
score: calculateMatchScore(query, target, result.positions, consecutive),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const calculateMatchScore = (query, target, positions, consecutive) => {
|
|
||||||
const n = positions.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0) return 0;
|
|
||||||
|
|
||||||
let score = 1.0;
|
|
||||||
|
|
||||||
const startBonus = (m - positions[0]) / m;
|
|
||||||
score += startBonus * 0.5;
|
|
||||||
|
|
||||||
let gapPenalty = 0;
|
|
||||||
for (let i = 1; i < n; i++) {
|
|
||||||
const gap = positions[i] - positions[i - 1] - 1;
|
|
||||||
if (gap > 0) {
|
|
||||||
gapPenalty += Math.min(gap / m, 1.0) * 0.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score -= gapPenalty;
|
|
||||||
|
|
||||||
const consecutiveBonus = consecutive / n;
|
|
||||||
score += consecutiveBonus * 0.3;
|
|
||||||
|
|
||||||
let boundaryBonus = 0;
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const char = target[positions[i]];
|
|
||||||
if (i === 0 || isWordBoundary(char)) {
|
|
||||||
boundaryBonus += 0.05;
|
|
||||||
}
|
|
||||||
if (i > 0) {
|
|
||||||
const prevChar = target[positions[i - 1]];
|
|
||||||
if (isCaseTransition(prevChar, char)) {
|
|
||||||
boundaryBonus += 0.03;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score = Math.min(1.0, score + boundaryBonus);
|
|
||||||
|
|
||||||
const lengthPenalty = Math.abs(query.length - n) / Math.max(query.length, m);
|
|
||||||
score -= lengthPenalty * 0.2;
|
|
||||||
|
|
||||||
return Math.max(0, Math.min(1.0, score));
|
|
||||||
};
|
|
||||||
|
|
||||||
const fuzzyMatch = (query, target) => {
|
|
||||||
const lowerQuery = query.toLowerCase();
|
|
||||||
const lowerTarget = target.toLowerCase();
|
|
||||||
|
|
||||||
if (lowerQuery.length === 0) return null;
|
|
||||||
if (lowerTarget.length === 0) return null;
|
|
||||||
|
|
||||||
if (lowerTarget === lowerQuery) {
|
|
||||||
return 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lowerTarget.includes(lowerQuery)) {
|
|
||||||
const ratio = lowerQuery.length / lowerTarget.length;
|
|
||||||
return 0.8 + ratio * 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
const match = findBestSubsequenceMatch(lowerQuery, lowerTarget);
|
|
||||||
if (!match) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.min(1.0, match.score);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.onmessage = function (e) {
|
|
||||||
const { messageId, type, data } = e.data;
|
|
||||||
|
|
||||||
const respond = (type, data) => {
|
|
||||||
self.postMessage({ messageId, type, data });
|
|
||||||
};
|
|
||||||
|
|
||||||
const respondError = (error) => {
|
|
||||||
self.postMessage({
|
|
||||||
messageId,
|
|
||||||
type: "error",
|
|
||||||
error: error.message || String(error),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (type === "tokenize") {
|
|
||||||
const text = typeof data === "string" ? data : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const tokens = words.filter((word) => word.length > 2);
|
|
||||||
const uniqueTokens = Array.from(new Set(tokens));
|
|
||||||
respond("tokens", uniqueTokens);
|
|
||||||
} else if (type === "search") {
|
|
||||||
const { query, limit = 10 } = data;
|
|
||||||
|
|
||||||
if (!query || typeof query !== "string") {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawQuery = query.toLowerCase();
|
|
||||||
const text = typeof query === "string" ? query : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const searchTerms = words.filter((word) => word.length > 2);
|
|
||||||
|
|
||||||
let documents = [];
|
|
||||||
if (typeof data.documents === "string") {
|
|
||||||
documents = JSON.parse(data.documents);
|
|
||||||
} else if (Array.isArray(data.documents)) {
|
|
||||||
documents = data.documents;
|
|
||||||
} else if (typeof data.transferables === "string") {
|
|
||||||
documents = JSON.parse(data.transferables);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.isArray(documents) || documents.length === 0) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const useFuzzySearch = rawQuery.length >= 3;
|
|
||||||
|
|
||||||
if (searchTerms.length === 0 && rawQuery.length < 3) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const pageMatches = new Map();
|
|
||||||
|
|
||||||
// Pre-compute lower-case strings for each document
|
|
||||||
const processedDocs = documents.map((doc, docId) => {
|
|
||||||
const title = typeof doc.title === "string" ? doc.title : "";
|
|
||||||
const content = typeof doc.content === "string" ? doc.content : "";
|
|
||||||
|
|
||||||
return {
|
|
||||||
docId,
|
|
||||||
doc,
|
|
||||||
lowerTitle: title.toLowerCase(),
|
|
||||||
lowerContent: content.toLowerCase(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// First pass: Score pages with fuzzy matching
|
|
||||||
processedDocs.forEach(({ docId, doc, lowerTitle, lowerContent }) => {
|
|
||||||
let match = pageMatches.get(docId);
|
|
||||||
if (!match) {
|
|
||||||
match = { doc, pageScore: 0, matchingAnchors: [] };
|
|
||||||
pageMatches.set(docId, match);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyTitleScore = fuzzyMatch(rawQuery, lowerTitle);
|
|
||||||
if (fuzzyTitleScore !== null) {
|
|
||||||
match.pageScore += fuzzyTitleScore * 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fuzzyContentScore = fuzzyMatch(rawQuery, lowerContent);
|
|
||||||
if (fuzzyContentScore !== null) {
|
|
||||||
match.pageScore += fuzzyContentScore * 30;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Token-based exact matching
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (lowerTitle.includes(term)) {
|
|
||||||
match.pageScore += lowerTitle === term ? 20 : 10;
|
|
||||||
}
|
|
||||||
if (lowerContent.includes(term)) {
|
|
||||||
match.pageScore += 2;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Second pass: Find matching anchors
|
|
||||||
pageMatches.forEach((match) => {
|
|
||||||
const doc = match.doc;
|
|
||||||
if (
|
|
||||||
!doc.anchors ||
|
|
||||||
!Array.isArray(doc.anchors) ||
|
|
||||||
doc.anchors.length === 0
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
doc.anchors.forEach((anchor) => {
|
|
||||||
if (!anchor || !anchor.text) return;
|
|
||||||
|
|
||||||
const anchorText = anchor.text.toLowerCase();
|
|
||||||
let anchorMatches = false;
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyScore = fuzzyMatch(rawQuery, anchorText);
|
|
||||||
if (fuzzyScore !== null && fuzzyScore >= 0.4) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!anchorMatches) {
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (anchorText.includes(term)) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (anchorMatches) {
|
|
||||||
match.matchingAnchors.push(anchor);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const results = Array.from(pageMatches.values())
|
|
||||||
.filter((m) => m.pageScore > 5)
|
|
||||||
.sort((a, b) => b.pageScore - a.pageScore)
|
|
||||||
.slice(0, limit);
|
|
||||||
|
|
||||||
respond("results", results);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
respondError(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
|
@ -1,157 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Known Issues and Quirks</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input type="text" id="search-input" placeholder="Search..." />
|
|
||||||
<div id="search-results" class="search-results"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav class="sidebar">
|
|
||||||
<details class="sidebar-section" data-section="docs" open>
|
|
||||||
<summary>Documents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details class="sidebar-section" data-section="toc" open>
|
|
||||||
<summary>Contents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul class="toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content"><html><head></head><body><h1 id="ch-known-issues-quirks">Known Issues and Quirks</h1>
|
|
||||||
<p>At times, certain plugins and modules may refuse to play nicely with your setup,
|
|
||||||
be it a result of generating Lua from Nix, or the state of packaging. This page,
|
|
||||||
in turn, will list any known modules or plugins that are known to misbehave, and
|
|
||||||
possible workarounds that you may apply.</p>
|
|
||||||
<h2 id="ch-quirks-nodejs">NodeJS</h2>
|
|
||||||
<h3 id="sec-eslint-plugin-prettier">eslint-plugin-prettier</h3>
|
|
||||||
<p>When working with NodeJS, which is <em>obviously</em> known for its meticulous
|
|
||||||
standards, most things are bound to work as expected but some projects, tools
|
|
||||||
and settings may fool the default configurations of tools provided by <strong>nvf</strong>.</p>
|
|
||||||
<p>If <a href="https://github.com/prettier/eslint-plugin-prettier">eslint-plugin-prettier</a> or similar is included, you might get a situation
|
|
||||||
where your Eslint configuration diagnoses your formatting according to its own
|
|
||||||
config (usually <code>.eslintrc.js</code>). The issue there is your formatting is made via
|
|
||||||
prettierd.</p>
|
|
||||||
<p>This results in auto-formatting relying on your prettier configuration, while
|
|
||||||
your Eslint configuration diagnoses formatting "issues" while it's
|
|
||||||
<a href="https://prettier.io/docs/en/comparison.html">not supposed to</a>. In the end, you get discrepancies between what your editor
|
|
||||||
does and what it wants.</p>
|
|
||||||
<p>Solutions are:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Don't add a formatting config to Eslint, instead separate Prettier and
|
|
||||||
Eslint.</li>
|
|
||||||
<li>PR the repo in question to add an ESLint formatter, and configure <strong>nvf</strong> to
|
|
||||||
use it.</li>
|
|
||||||
</ol>
|
|
||||||
<h2 id="ch-bugs-suggestions">Bugs & Suggestions</h2>
|
|
||||||
<p>Some quirks are not exactly quirks, but bugs in the module system. If you notice
|
|
||||||
any issues with <strong>nvf</strong>, or this documentation, then please consider reporting
|
|
||||||
them over at the <a href="https://github.com/notashelf/nvf/issues">issue tracker</a>. Issues tab, in addition to the
|
|
||||||
<a href="https://github.com/notashelf/nvf/discussions">discussions tab</a> is a good place as any to request new features.</p>
|
|
||||||
<p>You may also consider submitting bug fixes, feature additions and upstreamed
|
|
||||||
changes that you think are critical over at the <a href="https://github.com/notashelf/nvf/pulls">pull requests tab</a>.</p>
|
|
||||||
</body></html></main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<aside class="page-toc">
|
|
||||||
<nav class="page-toc-nav">
|
|
||||||
<h3>On this page</h3>
|
|
||||||
<ul class="page-toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,140 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>NVF - Search</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
id="search-results"
|
|
||||||
class="search-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav id="sidebar" class="sidebar">
|
|
||||||
<div class="docs-nav">
|
|
||||||
<h2>Documents</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toc">
|
|
||||||
<h2>Contents</h2>
|
|
||||||
<ul class="toc-list">
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
<h1>Search</h1>
|
|
||||||
<div class="search-page">
|
|
||||||
<div class="search-form">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-page-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
autofocus
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="search-keyboard-hints" role="note" aria-label="Keyboard shortcuts">
|
|
||||||
<span class="hint-item"><kbd>↑</kbd> <kbd>↓</kbd> to navigate</span>
|
|
||||||
<span class="hint-item"><kbd>Enter</kbd> to select</span>
|
|
||||||
<span class="hint-item"><kbd>Esc</kbd> to clear</span>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
id="search-page-results"
|
|
||||||
class="search-page-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div class="footnotes-container">
|
|
||||||
<!-- Footnotes will be appended here -->
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -1,298 +0,0 @@
|
||||||
const isWordBoundary = (char) =>
|
|
||||||
/[A-Z]/.test(char) || /[-_\/.]/.test(char) || /\s/.test(char);
|
|
||||||
|
|
||||||
const isCaseTransition = (prev, curr) => {
|
|
||||||
const prevIsUpper = prev.toLowerCase() !== prev;
|
|
||||||
const currIsUpper = curr.toLowerCase() !== curr;
|
|
||||||
return (
|
|
||||||
prevIsUpper && currIsUpper && prev.toLowerCase() !== curr.toLowerCase()
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const findBestSubsequenceMatch = (query, target) => {
|
|
||||||
const n = query.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0 || m === 0) return null;
|
|
||||||
|
|
||||||
const positions = [];
|
|
||||||
|
|
||||||
const memo = new Map();
|
|
||||||
const key = (qIdx, tIdx, gap) => `${qIdx}:${tIdx}:${gap}`;
|
|
||||||
|
|
||||||
const findBest = (qIdx, tIdx, currentGap) => {
|
|
||||||
if (qIdx === n) {
|
|
||||||
return { done: true, positions: [...positions], gap: currentGap };
|
|
||||||
}
|
|
||||||
|
|
||||||
const memoKey = key(qIdx, tIdx, currentGap);
|
|
||||||
if (memo.has(memoKey)) {
|
|
||||||
return memo.get(memoKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
let bestResult = null;
|
|
||||||
|
|
||||||
for (let i = tIdx; i < m; i++) {
|
|
||||||
if (target[i] === query[qIdx]) {
|
|
||||||
positions.push(i);
|
|
||||||
const gap = qIdx === 0 ? 0 : i - positions[positions.length - 2] - 1;
|
|
||||||
const newGap = currentGap + gap;
|
|
||||||
|
|
||||||
if (newGap > m) {
|
|
||||||
positions.pop();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = findBest(qIdx + 1, i + 1, newGap);
|
|
||||||
positions.pop();
|
|
||||||
|
|
||||||
if (result && (!bestResult || result.gap < bestResult.gap)) {
|
|
||||||
bestResult = result;
|
|
||||||
if (result.gap === 0) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memo.set(memoKey, bestResult);
|
|
||||||
return bestResult;
|
|
||||||
};
|
|
||||||
|
|
||||||
const result = findBest(0, 0, 0);
|
|
||||||
if (!result) return null;
|
|
||||||
|
|
||||||
const consecutive = (() => {
|
|
||||||
let c = 1;
|
|
||||||
for (let i = 1; i < result.positions.length; i++) {
|
|
||||||
if (result.positions[i] === result.positions[i - 1] + 1) {
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
})();
|
|
||||||
|
|
||||||
return {
|
|
||||||
positions: result.positions,
|
|
||||||
consecutive,
|
|
||||||
score: calculateMatchScore(query, target, result.positions, consecutive),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const calculateMatchScore = (query, target, positions, consecutive) => {
|
|
||||||
const n = positions.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0) return 0;
|
|
||||||
|
|
||||||
let score = 1.0;
|
|
||||||
|
|
||||||
const startBonus = (m - positions[0]) / m;
|
|
||||||
score += startBonus * 0.5;
|
|
||||||
|
|
||||||
let gapPenalty = 0;
|
|
||||||
for (let i = 1; i < n; i++) {
|
|
||||||
const gap = positions[i] - positions[i - 1] - 1;
|
|
||||||
if (gap > 0) {
|
|
||||||
gapPenalty += Math.min(gap / m, 1.0) * 0.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score -= gapPenalty;
|
|
||||||
|
|
||||||
const consecutiveBonus = consecutive / n;
|
|
||||||
score += consecutiveBonus * 0.3;
|
|
||||||
|
|
||||||
let boundaryBonus = 0;
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const char = target[positions[i]];
|
|
||||||
if (i === 0 || isWordBoundary(char)) {
|
|
||||||
boundaryBonus += 0.05;
|
|
||||||
}
|
|
||||||
if (i > 0) {
|
|
||||||
const prevChar = target[positions[i - 1]];
|
|
||||||
if (isCaseTransition(prevChar, char)) {
|
|
||||||
boundaryBonus += 0.03;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score = Math.min(1.0, score + boundaryBonus);
|
|
||||||
|
|
||||||
const lengthPenalty = Math.abs(query.length - n) / Math.max(query.length, m);
|
|
||||||
score -= lengthPenalty * 0.2;
|
|
||||||
|
|
||||||
return Math.max(0, Math.min(1.0, score));
|
|
||||||
};
|
|
||||||
|
|
||||||
const fuzzyMatch = (query, target) => {
|
|
||||||
const lowerQuery = query.toLowerCase();
|
|
||||||
const lowerTarget = target.toLowerCase();
|
|
||||||
|
|
||||||
if (lowerQuery.length === 0) return null;
|
|
||||||
if (lowerTarget.length === 0) return null;
|
|
||||||
|
|
||||||
if (lowerTarget === lowerQuery) {
|
|
||||||
return 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lowerTarget.includes(lowerQuery)) {
|
|
||||||
const ratio = lowerQuery.length / lowerTarget.length;
|
|
||||||
return 0.8 + ratio * 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
const match = findBestSubsequenceMatch(lowerQuery, lowerTarget);
|
|
||||||
if (!match) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.min(1.0, match.score);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.onmessage = function (e) {
|
|
||||||
const { messageId, type, data } = e.data;
|
|
||||||
|
|
||||||
const respond = (type, data) => {
|
|
||||||
self.postMessage({ messageId, type, data });
|
|
||||||
};
|
|
||||||
|
|
||||||
const respondError = (error) => {
|
|
||||||
self.postMessage({
|
|
||||||
messageId,
|
|
||||||
type: "error",
|
|
||||||
error: error.message || String(error),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (type === "tokenize") {
|
|
||||||
const text = typeof data === "string" ? data : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const tokens = words.filter((word) => word.length > 2);
|
|
||||||
const uniqueTokens = Array.from(new Set(tokens));
|
|
||||||
respond("tokens", uniqueTokens);
|
|
||||||
} else if (type === "search") {
|
|
||||||
const { query, limit = 10 } = data;
|
|
||||||
|
|
||||||
if (!query || typeof query !== "string") {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawQuery = query.toLowerCase();
|
|
||||||
const text = typeof query === "string" ? query : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const searchTerms = words.filter((word) => word.length > 2);
|
|
||||||
|
|
||||||
let documents = [];
|
|
||||||
if (typeof data.documents === "string") {
|
|
||||||
documents = JSON.parse(data.documents);
|
|
||||||
} else if (Array.isArray(data.documents)) {
|
|
||||||
documents = data.documents;
|
|
||||||
} else if (typeof data.transferables === "string") {
|
|
||||||
documents = JSON.parse(data.transferables);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.isArray(documents) || documents.length === 0) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const useFuzzySearch = rawQuery.length >= 3;
|
|
||||||
|
|
||||||
if (searchTerms.length === 0 && rawQuery.length < 3) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const pageMatches = new Map();
|
|
||||||
|
|
||||||
// Pre-compute lower-case strings for each document
|
|
||||||
const processedDocs = documents.map((doc, docId) => {
|
|
||||||
const title = typeof doc.title === "string" ? doc.title : "";
|
|
||||||
const content = typeof doc.content === "string" ? doc.content : "";
|
|
||||||
|
|
||||||
return {
|
|
||||||
docId,
|
|
||||||
doc,
|
|
||||||
lowerTitle: title.toLowerCase(),
|
|
||||||
lowerContent: content.toLowerCase(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// First pass: Score pages with fuzzy matching
|
|
||||||
processedDocs.forEach(({ docId, doc, lowerTitle, lowerContent }) => {
|
|
||||||
let match = pageMatches.get(docId);
|
|
||||||
if (!match) {
|
|
||||||
match = { doc, pageScore: 0, matchingAnchors: [] };
|
|
||||||
pageMatches.set(docId, match);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyTitleScore = fuzzyMatch(rawQuery, lowerTitle);
|
|
||||||
if (fuzzyTitleScore !== null) {
|
|
||||||
match.pageScore += fuzzyTitleScore * 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fuzzyContentScore = fuzzyMatch(rawQuery, lowerContent);
|
|
||||||
if (fuzzyContentScore !== null) {
|
|
||||||
match.pageScore += fuzzyContentScore * 30;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Token-based exact matching
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (lowerTitle.includes(term)) {
|
|
||||||
match.pageScore += lowerTitle === term ? 20 : 10;
|
|
||||||
}
|
|
||||||
if (lowerContent.includes(term)) {
|
|
||||||
match.pageScore += 2;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Second pass: Find matching anchors
|
|
||||||
pageMatches.forEach((match) => {
|
|
||||||
const doc = match.doc;
|
|
||||||
if (
|
|
||||||
!doc.anchors ||
|
|
||||||
!Array.isArray(doc.anchors) ||
|
|
||||||
doc.anchors.length === 0
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
doc.anchors.forEach((anchor) => {
|
|
||||||
if (!anchor || !anchor.text) return;
|
|
||||||
|
|
||||||
const anchorText = anchor.text.toLowerCase();
|
|
||||||
let anchorMatches = false;
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyScore = fuzzyMatch(rawQuery, anchorText);
|
|
||||||
if (fuzzyScore !== null && fuzzyScore >= 0.4) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!anchorMatches) {
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (anchorText.includes(term)) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (anchorMatches) {
|
|
||||||
match.matchingAnchors.push(anchor);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const results = Array.from(pageMatches.values())
|
|
||||||
.filter((m) => m.pageScore > 5)
|
|
||||||
.sort((a, b) => b.pageScore - a.pageScore)
|
|
||||||
.slice(0, limit);
|
|
||||||
|
|
||||||
respond("results", results);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
respondError(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
|
@ -1,157 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Known Issues and Quirks</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input type="text" id="search-input" placeholder="Search..." />
|
|
||||||
<div id="search-results" class="search-results"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav class="sidebar">
|
|
||||||
<details class="sidebar-section" data-section="docs" open>
|
|
||||||
<summary>Documents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details class="sidebar-section" data-section="toc" open>
|
|
||||||
<summary>Contents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul class="toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content"><html><head></head><body><h1 id="ch-known-issues-quirks">Known Issues and Quirks</h1>
|
|
||||||
<p>At times, certain plugins and modules may refuse to play nicely with your setup,
|
|
||||||
be it a result of generating Lua from Nix, or the state of packaging. This page,
|
|
||||||
in turn, will list any known modules or plugins that are known to misbehave, and
|
|
||||||
possible workarounds that you may apply.</p>
|
|
||||||
<h2 id="ch-quirks-nodejs">NodeJS</h2>
|
|
||||||
<h3 id="sec-eslint-plugin-prettier">eslint-plugin-prettier</h3>
|
|
||||||
<p>When working with NodeJS, which is <em>obviously</em> known for its meticulous
|
|
||||||
standards, most things are bound to work as expected but some projects, tools
|
|
||||||
and settings may fool the default configurations of tools provided by <strong>nvf</strong>.</p>
|
|
||||||
<p>If <a href="https://github.com/prettier/eslint-plugin-prettier">eslint-plugin-prettier</a> or similar is included, you might get a situation
|
|
||||||
where your Eslint configuration diagnoses your formatting according to its own
|
|
||||||
config (usually <code>.eslintrc.js</code>). The issue there is your formatting is made via
|
|
||||||
prettierd.</p>
|
|
||||||
<p>This results in auto-formatting relying on your prettier configuration, while
|
|
||||||
your Eslint configuration diagnoses formatting "issues" while it's
|
|
||||||
<a href="https://prettier.io/docs/en/comparison.html">not supposed to</a>. In the end, you get discrepancies between what your editor
|
|
||||||
does and what it wants.</p>
|
|
||||||
<p>Solutions are:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Don't add a formatting config to Eslint, instead separate Prettier and
|
|
||||||
Eslint.</li>
|
|
||||||
<li>PR the repo in question to add an ESLint formatter, and configure <strong>nvf</strong> to
|
|
||||||
use it.</li>
|
|
||||||
</ol>
|
|
||||||
<h2 id="ch-bugs-suggestions">Bugs & Suggestions</h2>
|
|
||||||
<p>Some quirks are not exactly quirks, but bugs in the module system. If you notice
|
|
||||||
any issues with <strong>nvf</strong>, or this documentation, then please consider reporting
|
|
||||||
them over at the <a href="https://github.com/notashelf/nvf/issues">issue tracker</a>. Issues tab, in addition to the
|
|
||||||
<a href="https://github.com/notashelf/nvf/discussions">discussions tab</a> is a good place as any to request new features.</p>
|
|
||||||
<p>You may also consider submitting bug fixes, feature additions and upstreamed
|
|
||||||
changes that you think are critical over at the <a href="https://github.com/notashelf/nvf/pulls">pull requests tab</a>.</p>
|
|
||||||
</body></html></main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<aside class="page-toc">
|
|
||||||
<nav class="page-toc-nav">
|
|
||||||
<h3>On this page</h3>
|
|
||||||
<ul class="page-toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,140 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>NVF - Search</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
id="search-results"
|
|
||||||
class="search-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav id="sidebar" class="sidebar">
|
|
||||||
<div class="docs-nav">
|
|
||||||
<h2>Documents</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toc">
|
|
||||||
<h2>Contents</h2>
|
|
||||||
<ul class="toc-list">
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
<h1>Search</h1>
|
|
||||||
<div class="search-page">
|
|
||||||
<div class="search-form">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-page-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
autofocus
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="search-keyboard-hints" role="note" aria-label="Keyboard shortcuts">
|
|
||||||
<span class="hint-item"><kbd>↑</kbd> <kbd>↓</kbd> to navigate</span>
|
|
||||||
<span class="hint-item"><kbd>Enter</kbd> to select</span>
|
|
||||||
<span class="hint-item"><kbd>Esc</kbd> to clear</span>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
id="search-page-results"
|
|
||||||
class="search-page-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div class="footnotes-container">
|
|
||||||
<!-- Footnotes will be appended here -->
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -1,298 +0,0 @@
|
||||||
const isWordBoundary = (char) =>
|
|
||||||
/[A-Z]/.test(char) || /[-_\/.]/.test(char) || /\s/.test(char);
|
|
||||||
|
|
||||||
const isCaseTransition = (prev, curr) => {
|
|
||||||
const prevIsUpper = prev.toLowerCase() !== prev;
|
|
||||||
const currIsUpper = curr.toLowerCase() !== curr;
|
|
||||||
return (
|
|
||||||
prevIsUpper && currIsUpper && prev.toLowerCase() !== curr.toLowerCase()
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const findBestSubsequenceMatch = (query, target) => {
|
|
||||||
const n = query.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0 || m === 0) return null;
|
|
||||||
|
|
||||||
const positions = [];
|
|
||||||
|
|
||||||
const memo = new Map();
|
|
||||||
const key = (qIdx, tIdx, gap) => `${qIdx}:${tIdx}:${gap}`;
|
|
||||||
|
|
||||||
const findBest = (qIdx, tIdx, currentGap) => {
|
|
||||||
if (qIdx === n) {
|
|
||||||
return { done: true, positions: [...positions], gap: currentGap };
|
|
||||||
}
|
|
||||||
|
|
||||||
const memoKey = key(qIdx, tIdx, currentGap);
|
|
||||||
if (memo.has(memoKey)) {
|
|
||||||
return memo.get(memoKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
let bestResult = null;
|
|
||||||
|
|
||||||
for (let i = tIdx; i < m; i++) {
|
|
||||||
if (target[i] === query[qIdx]) {
|
|
||||||
positions.push(i);
|
|
||||||
const gap = qIdx === 0 ? 0 : i - positions[positions.length - 2] - 1;
|
|
||||||
const newGap = currentGap + gap;
|
|
||||||
|
|
||||||
if (newGap > m) {
|
|
||||||
positions.pop();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = findBest(qIdx + 1, i + 1, newGap);
|
|
||||||
positions.pop();
|
|
||||||
|
|
||||||
if (result && (!bestResult || result.gap < bestResult.gap)) {
|
|
||||||
bestResult = result;
|
|
||||||
if (result.gap === 0) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memo.set(memoKey, bestResult);
|
|
||||||
return bestResult;
|
|
||||||
};
|
|
||||||
|
|
||||||
const result = findBest(0, 0, 0);
|
|
||||||
if (!result) return null;
|
|
||||||
|
|
||||||
const consecutive = (() => {
|
|
||||||
let c = 1;
|
|
||||||
for (let i = 1; i < result.positions.length; i++) {
|
|
||||||
if (result.positions[i] === result.positions[i - 1] + 1) {
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
})();
|
|
||||||
|
|
||||||
return {
|
|
||||||
positions: result.positions,
|
|
||||||
consecutive,
|
|
||||||
score: calculateMatchScore(query, target, result.positions, consecutive),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const calculateMatchScore = (query, target, positions, consecutive) => {
|
|
||||||
const n = positions.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0) return 0;
|
|
||||||
|
|
||||||
let score = 1.0;
|
|
||||||
|
|
||||||
const startBonus = (m - positions[0]) / m;
|
|
||||||
score += startBonus * 0.5;
|
|
||||||
|
|
||||||
let gapPenalty = 0;
|
|
||||||
for (let i = 1; i < n; i++) {
|
|
||||||
const gap = positions[i] - positions[i - 1] - 1;
|
|
||||||
if (gap > 0) {
|
|
||||||
gapPenalty += Math.min(gap / m, 1.0) * 0.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score -= gapPenalty;
|
|
||||||
|
|
||||||
const consecutiveBonus = consecutive / n;
|
|
||||||
score += consecutiveBonus * 0.3;
|
|
||||||
|
|
||||||
let boundaryBonus = 0;
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const char = target[positions[i]];
|
|
||||||
if (i === 0 || isWordBoundary(char)) {
|
|
||||||
boundaryBonus += 0.05;
|
|
||||||
}
|
|
||||||
if (i > 0) {
|
|
||||||
const prevChar = target[positions[i - 1]];
|
|
||||||
if (isCaseTransition(prevChar, char)) {
|
|
||||||
boundaryBonus += 0.03;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score = Math.min(1.0, score + boundaryBonus);
|
|
||||||
|
|
||||||
const lengthPenalty = Math.abs(query.length - n) / Math.max(query.length, m);
|
|
||||||
score -= lengthPenalty * 0.2;
|
|
||||||
|
|
||||||
return Math.max(0, Math.min(1.0, score));
|
|
||||||
};
|
|
||||||
|
|
||||||
const fuzzyMatch = (query, target) => {
|
|
||||||
const lowerQuery = query.toLowerCase();
|
|
||||||
const lowerTarget = target.toLowerCase();
|
|
||||||
|
|
||||||
if (lowerQuery.length === 0) return null;
|
|
||||||
if (lowerTarget.length === 0) return null;
|
|
||||||
|
|
||||||
if (lowerTarget === lowerQuery) {
|
|
||||||
return 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lowerTarget.includes(lowerQuery)) {
|
|
||||||
const ratio = lowerQuery.length / lowerTarget.length;
|
|
||||||
return 0.8 + ratio * 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
const match = findBestSubsequenceMatch(lowerQuery, lowerTarget);
|
|
||||||
if (!match) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.min(1.0, match.score);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.onmessage = function (e) {
|
|
||||||
const { messageId, type, data } = e.data;
|
|
||||||
|
|
||||||
const respond = (type, data) => {
|
|
||||||
self.postMessage({ messageId, type, data });
|
|
||||||
};
|
|
||||||
|
|
||||||
const respondError = (error) => {
|
|
||||||
self.postMessage({
|
|
||||||
messageId,
|
|
||||||
type: "error",
|
|
||||||
error: error.message || String(error),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (type === "tokenize") {
|
|
||||||
const text = typeof data === "string" ? data : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const tokens = words.filter((word) => word.length > 2);
|
|
||||||
const uniqueTokens = Array.from(new Set(tokens));
|
|
||||||
respond("tokens", uniqueTokens);
|
|
||||||
} else if (type === "search") {
|
|
||||||
const { query, limit = 10 } = data;
|
|
||||||
|
|
||||||
if (!query || typeof query !== "string") {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawQuery = query.toLowerCase();
|
|
||||||
const text = typeof query === "string" ? query : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const searchTerms = words.filter((word) => word.length > 2);
|
|
||||||
|
|
||||||
let documents = [];
|
|
||||||
if (typeof data.documents === "string") {
|
|
||||||
documents = JSON.parse(data.documents);
|
|
||||||
} else if (Array.isArray(data.documents)) {
|
|
||||||
documents = data.documents;
|
|
||||||
} else if (typeof data.transferables === "string") {
|
|
||||||
documents = JSON.parse(data.transferables);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.isArray(documents) || documents.length === 0) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const useFuzzySearch = rawQuery.length >= 3;
|
|
||||||
|
|
||||||
if (searchTerms.length === 0 && rawQuery.length < 3) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const pageMatches = new Map();
|
|
||||||
|
|
||||||
// Pre-compute lower-case strings for each document
|
|
||||||
const processedDocs = documents.map((doc, docId) => {
|
|
||||||
const title = typeof doc.title === "string" ? doc.title : "";
|
|
||||||
const content = typeof doc.content === "string" ? doc.content : "";
|
|
||||||
|
|
||||||
return {
|
|
||||||
docId,
|
|
||||||
doc,
|
|
||||||
lowerTitle: title.toLowerCase(),
|
|
||||||
lowerContent: content.toLowerCase(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// First pass: Score pages with fuzzy matching
|
|
||||||
processedDocs.forEach(({ docId, doc, lowerTitle, lowerContent }) => {
|
|
||||||
let match = pageMatches.get(docId);
|
|
||||||
if (!match) {
|
|
||||||
match = { doc, pageScore: 0, matchingAnchors: [] };
|
|
||||||
pageMatches.set(docId, match);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyTitleScore = fuzzyMatch(rawQuery, lowerTitle);
|
|
||||||
if (fuzzyTitleScore !== null) {
|
|
||||||
match.pageScore += fuzzyTitleScore * 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fuzzyContentScore = fuzzyMatch(rawQuery, lowerContent);
|
|
||||||
if (fuzzyContentScore !== null) {
|
|
||||||
match.pageScore += fuzzyContentScore * 30;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Token-based exact matching
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (lowerTitle.includes(term)) {
|
|
||||||
match.pageScore += lowerTitle === term ? 20 : 10;
|
|
||||||
}
|
|
||||||
if (lowerContent.includes(term)) {
|
|
||||||
match.pageScore += 2;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Second pass: Find matching anchors
|
|
||||||
pageMatches.forEach((match) => {
|
|
||||||
const doc = match.doc;
|
|
||||||
if (
|
|
||||||
!doc.anchors ||
|
|
||||||
!Array.isArray(doc.anchors) ||
|
|
||||||
doc.anchors.length === 0
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
doc.anchors.forEach((anchor) => {
|
|
||||||
if (!anchor || !anchor.text) return;
|
|
||||||
|
|
||||||
const anchorText = anchor.text.toLowerCase();
|
|
||||||
let anchorMatches = false;
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyScore = fuzzyMatch(rawQuery, anchorText);
|
|
||||||
if (fuzzyScore !== null && fuzzyScore >= 0.4) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!anchorMatches) {
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (anchorText.includes(term)) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (anchorMatches) {
|
|
||||||
match.matchingAnchors.push(anchor);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const results = Array.from(pageMatches.values())
|
|
||||||
.filter((m) => m.pageScore > 5)
|
|
||||||
.sort((a, b) => b.pageScore - a.pageScore)
|
|
||||||
.slice(0, limit);
|
|
||||||
|
|
||||||
respond("results", results);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
respondError(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
|
@ -1,157 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Known Issues and Quirks</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input type="text" id="search-input" placeholder="Search..." />
|
|
||||||
<div id="search-results" class="search-results"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav class="sidebar">
|
|
||||||
<details class="sidebar-section" data-section="docs" open>
|
|
||||||
<summary>Documents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details class="sidebar-section" data-section="toc" open>
|
|
||||||
<summary>Contents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul class="toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content"><html><head></head><body><h1 id="ch-known-issues-quirks">Known Issues and Quirks</h1>
|
|
||||||
<p>At times, certain plugins and modules may refuse to play nicely with your setup,
|
|
||||||
be it a result of generating Lua from Nix, or the state of packaging. This page,
|
|
||||||
in turn, will list any known modules or plugins that are known to misbehave, and
|
|
||||||
possible workarounds that you may apply.</p>
|
|
||||||
<h2 id="ch-quirks-nodejs">NodeJS</h2>
|
|
||||||
<h3 id="sec-eslint-plugin-prettier">eslint-plugin-prettier</h3>
|
|
||||||
<p>When working with NodeJS, which is <em>obviously</em> known for its meticulous
|
|
||||||
standards, most things are bound to work as expected but some projects, tools
|
|
||||||
and settings may fool the default configurations of tools provided by <strong>nvf</strong>.</p>
|
|
||||||
<p>If <a href="https://github.com/prettier/eslint-plugin-prettier">eslint-plugin-prettier</a> or similar is included, you might get a situation
|
|
||||||
where your Eslint configuration diagnoses your formatting according to its own
|
|
||||||
config (usually <code>.eslintrc.js</code>). The issue there is your formatting is made via
|
|
||||||
prettierd.</p>
|
|
||||||
<p>This results in auto-formatting relying on your prettier configuration, while
|
|
||||||
your Eslint configuration diagnoses formatting "issues" while it's
|
|
||||||
<a href="https://prettier.io/docs/en/comparison.html">not supposed to</a>. In the end, you get discrepancies between what your editor
|
|
||||||
does and what it wants.</p>
|
|
||||||
<p>Solutions are:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Don't add a formatting config to Eslint, instead separate Prettier and
|
|
||||||
Eslint.</li>
|
|
||||||
<li>PR the repo in question to add an ESLint formatter, and configure <strong>nvf</strong> to
|
|
||||||
use it.</li>
|
|
||||||
</ol>
|
|
||||||
<h2 id="ch-bugs-suggestions">Bugs & Suggestions</h2>
|
|
||||||
<p>Some quirks are not exactly quirks, but bugs in the module system. If you notice
|
|
||||||
any issues with <strong>nvf</strong>, or this documentation, then please consider reporting
|
|
||||||
them over at the <a href="https://github.com/notashelf/nvf/issues">issue tracker</a>. Issues tab, in addition to the
|
|
||||||
<a href="https://github.com/notashelf/nvf/discussions">discussions tab</a> is a good place as any to request new features.</p>
|
|
||||||
<p>You may also consider submitting bug fixes, feature additions and upstreamed
|
|
||||||
changes that you think are critical over at the <a href="https://github.com/notashelf/nvf/pulls">pull requests tab</a>.</p>
|
|
||||||
</body></html></main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<aside class="page-toc">
|
|
||||||
<nav class="page-toc-nav">
|
|
||||||
<h3>On this page</h3>
|
|
||||||
<ul class="page-toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,140 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>NVF - Search</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
id="search-results"
|
|
||||||
class="search-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav id="sidebar" class="sidebar">
|
|
||||||
<div class="docs-nav">
|
|
||||||
<h2>Documents</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toc">
|
|
||||||
<h2>Contents</h2>
|
|
||||||
<ul class="toc-list">
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
<h1>Search</h1>
|
|
||||||
<div class="search-page">
|
|
||||||
<div class="search-form">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-page-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
autofocus
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="search-keyboard-hints" role="note" aria-label="Keyboard shortcuts">
|
|
||||||
<span class="hint-item"><kbd>↑</kbd> <kbd>↓</kbd> to navigate</span>
|
|
||||||
<span class="hint-item"><kbd>Enter</kbd> to select</span>
|
|
||||||
<span class="hint-item"><kbd>Esc</kbd> to clear</span>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
id="search-page-results"
|
|
||||||
class="search-page-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div class="footnotes-container">
|
|
||||||
<!-- Footnotes will be appended here -->
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -1,298 +0,0 @@
|
||||||
const isWordBoundary = (char) =>
|
|
||||||
/[A-Z]/.test(char) || /[-_\/.]/.test(char) || /\s/.test(char);
|
|
||||||
|
|
||||||
const isCaseTransition = (prev, curr) => {
|
|
||||||
const prevIsUpper = prev.toLowerCase() !== prev;
|
|
||||||
const currIsUpper = curr.toLowerCase() !== curr;
|
|
||||||
return (
|
|
||||||
prevIsUpper && currIsUpper && prev.toLowerCase() !== curr.toLowerCase()
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const findBestSubsequenceMatch = (query, target) => {
|
|
||||||
const n = query.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0 || m === 0) return null;
|
|
||||||
|
|
||||||
const positions = [];
|
|
||||||
|
|
||||||
const memo = new Map();
|
|
||||||
const key = (qIdx, tIdx, gap) => `${qIdx}:${tIdx}:${gap}`;
|
|
||||||
|
|
||||||
const findBest = (qIdx, tIdx, currentGap) => {
|
|
||||||
if (qIdx === n) {
|
|
||||||
return { done: true, positions: [...positions], gap: currentGap };
|
|
||||||
}
|
|
||||||
|
|
||||||
const memoKey = key(qIdx, tIdx, currentGap);
|
|
||||||
if (memo.has(memoKey)) {
|
|
||||||
return memo.get(memoKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
let bestResult = null;
|
|
||||||
|
|
||||||
for (let i = tIdx; i < m; i++) {
|
|
||||||
if (target[i] === query[qIdx]) {
|
|
||||||
positions.push(i);
|
|
||||||
const gap = qIdx === 0 ? 0 : i - positions[positions.length - 2] - 1;
|
|
||||||
const newGap = currentGap + gap;
|
|
||||||
|
|
||||||
if (newGap > m) {
|
|
||||||
positions.pop();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = findBest(qIdx + 1, i + 1, newGap);
|
|
||||||
positions.pop();
|
|
||||||
|
|
||||||
if (result && (!bestResult || result.gap < bestResult.gap)) {
|
|
||||||
bestResult = result;
|
|
||||||
if (result.gap === 0) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memo.set(memoKey, bestResult);
|
|
||||||
return bestResult;
|
|
||||||
};
|
|
||||||
|
|
||||||
const result = findBest(0, 0, 0);
|
|
||||||
if (!result) return null;
|
|
||||||
|
|
||||||
const consecutive = (() => {
|
|
||||||
let c = 1;
|
|
||||||
for (let i = 1; i < result.positions.length; i++) {
|
|
||||||
if (result.positions[i] === result.positions[i - 1] + 1) {
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
})();
|
|
||||||
|
|
||||||
return {
|
|
||||||
positions: result.positions,
|
|
||||||
consecutive,
|
|
||||||
score: calculateMatchScore(query, target, result.positions, consecutive),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const calculateMatchScore = (query, target, positions, consecutive) => {
|
|
||||||
const n = positions.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0) return 0;
|
|
||||||
|
|
||||||
let score = 1.0;
|
|
||||||
|
|
||||||
const startBonus = (m - positions[0]) / m;
|
|
||||||
score += startBonus * 0.5;
|
|
||||||
|
|
||||||
let gapPenalty = 0;
|
|
||||||
for (let i = 1; i < n; i++) {
|
|
||||||
const gap = positions[i] - positions[i - 1] - 1;
|
|
||||||
if (gap > 0) {
|
|
||||||
gapPenalty += Math.min(gap / m, 1.0) * 0.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score -= gapPenalty;
|
|
||||||
|
|
||||||
const consecutiveBonus = consecutive / n;
|
|
||||||
score += consecutiveBonus * 0.3;
|
|
||||||
|
|
||||||
let boundaryBonus = 0;
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const char = target[positions[i]];
|
|
||||||
if (i === 0 || isWordBoundary(char)) {
|
|
||||||
boundaryBonus += 0.05;
|
|
||||||
}
|
|
||||||
if (i > 0) {
|
|
||||||
const prevChar = target[positions[i - 1]];
|
|
||||||
if (isCaseTransition(prevChar, char)) {
|
|
||||||
boundaryBonus += 0.03;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score = Math.min(1.0, score + boundaryBonus);
|
|
||||||
|
|
||||||
const lengthPenalty = Math.abs(query.length - n) / Math.max(query.length, m);
|
|
||||||
score -= lengthPenalty * 0.2;
|
|
||||||
|
|
||||||
return Math.max(0, Math.min(1.0, score));
|
|
||||||
};
|
|
||||||
|
|
||||||
const fuzzyMatch = (query, target) => {
|
|
||||||
const lowerQuery = query.toLowerCase();
|
|
||||||
const lowerTarget = target.toLowerCase();
|
|
||||||
|
|
||||||
if (lowerQuery.length === 0) return null;
|
|
||||||
if (lowerTarget.length === 0) return null;
|
|
||||||
|
|
||||||
if (lowerTarget === lowerQuery) {
|
|
||||||
return 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lowerTarget.includes(lowerQuery)) {
|
|
||||||
const ratio = lowerQuery.length / lowerTarget.length;
|
|
||||||
return 0.8 + ratio * 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
const match = findBestSubsequenceMatch(lowerQuery, lowerTarget);
|
|
||||||
if (!match) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.min(1.0, match.score);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.onmessage = function (e) {
|
|
||||||
const { messageId, type, data } = e.data;
|
|
||||||
|
|
||||||
const respond = (type, data) => {
|
|
||||||
self.postMessage({ messageId, type, data });
|
|
||||||
};
|
|
||||||
|
|
||||||
const respondError = (error) => {
|
|
||||||
self.postMessage({
|
|
||||||
messageId,
|
|
||||||
type: "error",
|
|
||||||
error: error.message || String(error),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (type === "tokenize") {
|
|
||||||
const text = typeof data === "string" ? data : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const tokens = words.filter((word) => word.length > 2);
|
|
||||||
const uniqueTokens = Array.from(new Set(tokens));
|
|
||||||
respond("tokens", uniqueTokens);
|
|
||||||
} else if (type === "search") {
|
|
||||||
const { query, limit = 10 } = data;
|
|
||||||
|
|
||||||
if (!query || typeof query !== "string") {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawQuery = query.toLowerCase();
|
|
||||||
const text = typeof query === "string" ? query : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const searchTerms = words.filter((word) => word.length > 2);
|
|
||||||
|
|
||||||
let documents = [];
|
|
||||||
if (typeof data.documents === "string") {
|
|
||||||
documents = JSON.parse(data.documents);
|
|
||||||
} else if (Array.isArray(data.documents)) {
|
|
||||||
documents = data.documents;
|
|
||||||
} else if (typeof data.transferables === "string") {
|
|
||||||
documents = JSON.parse(data.transferables);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.isArray(documents) || documents.length === 0) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const useFuzzySearch = rawQuery.length >= 3;
|
|
||||||
|
|
||||||
if (searchTerms.length === 0 && rawQuery.length < 3) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const pageMatches = new Map();
|
|
||||||
|
|
||||||
// Pre-compute lower-case strings for each document
|
|
||||||
const processedDocs = documents.map((doc, docId) => {
|
|
||||||
const title = typeof doc.title === "string" ? doc.title : "";
|
|
||||||
const content = typeof doc.content === "string" ? doc.content : "";
|
|
||||||
|
|
||||||
return {
|
|
||||||
docId,
|
|
||||||
doc,
|
|
||||||
lowerTitle: title.toLowerCase(),
|
|
||||||
lowerContent: content.toLowerCase(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// First pass: Score pages with fuzzy matching
|
|
||||||
processedDocs.forEach(({ docId, doc, lowerTitle, lowerContent }) => {
|
|
||||||
let match = pageMatches.get(docId);
|
|
||||||
if (!match) {
|
|
||||||
match = { doc, pageScore: 0, matchingAnchors: [] };
|
|
||||||
pageMatches.set(docId, match);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyTitleScore = fuzzyMatch(rawQuery, lowerTitle);
|
|
||||||
if (fuzzyTitleScore !== null) {
|
|
||||||
match.pageScore += fuzzyTitleScore * 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fuzzyContentScore = fuzzyMatch(rawQuery, lowerContent);
|
|
||||||
if (fuzzyContentScore !== null) {
|
|
||||||
match.pageScore += fuzzyContentScore * 30;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Token-based exact matching
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (lowerTitle.includes(term)) {
|
|
||||||
match.pageScore += lowerTitle === term ? 20 : 10;
|
|
||||||
}
|
|
||||||
if (lowerContent.includes(term)) {
|
|
||||||
match.pageScore += 2;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Second pass: Find matching anchors
|
|
||||||
pageMatches.forEach((match) => {
|
|
||||||
const doc = match.doc;
|
|
||||||
if (
|
|
||||||
!doc.anchors ||
|
|
||||||
!Array.isArray(doc.anchors) ||
|
|
||||||
doc.anchors.length === 0
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
doc.anchors.forEach((anchor) => {
|
|
||||||
if (!anchor || !anchor.text) return;
|
|
||||||
|
|
||||||
const anchorText = anchor.text.toLowerCase();
|
|
||||||
let anchorMatches = false;
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyScore = fuzzyMatch(rawQuery, anchorText);
|
|
||||||
if (fuzzyScore !== null && fuzzyScore >= 0.4) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!anchorMatches) {
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (anchorText.includes(term)) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (anchorMatches) {
|
|
||||||
match.matchingAnchors.push(anchor);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const results = Array.from(pageMatches.values())
|
|
||||||
.filter((m) => m.pageScore > 5)
|
|
||||||
.sort((a, b) => b.pageScore - a.pageScore)
|
|
||||||
.slice(0, limit);
|
|
||||||
|
|
||||||
respond("results", results);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
respondError(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
|
@ -1,157 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Known Issues and Quirks</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input type="text" id="search-input" placeholder="Search..." />
|
|
||||||
<div id="search-results" class="search-results"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav class="sidebar">
|
|
||||||
<details class="sidebar-section" data-section="docs" open>
|
|
||||||
<summary>Documents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details class="sidebar-section" data-section="toc" open>
|
|
||||||
<summary>Contents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul class="toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content"><html><head></head><body><h1 id="ch-known-issues-quirks">Known Issues and Quirks</h1>
|
|
||||||
<p>At times, certain plugins and modules may refuse to play nicely with your setup,
|
|
||||||
be it a result of generating Lua from Nix, or the state of packaging. This page,
|
|
||||||
in turn, will list any known modules or plugins that are known to misbehave, and
|
|
||||||
possible workarounds that you may apply.</p>
|
|
||||||
<h2 id="ch-quirks-nodejs">NodeJS</h2>
|
|
||||||
<h3 id="sec-eslint-plugin-prettier">eslint-plugin-prettier</h3>
|
|
||||||
<p>When working with NodeJS, which is <em>obviously</em> known for its meticulous
|
|
||||||
standards, most things are bound to work as expected but some projects, tools
|
|
||||||
and settings may fool the default configurations of tools provided by <strong>nvf</strong>.</p>
|
|
||||||
<p>If <a href="https://github.com/prettier/eslint-plugin-prettier">eslint-plugin-prettier</a> or similar is included, you might get a situation
|
|
||||||
where your Eslint configuration diagnoses your formatting according to its own
|
|
||||||
config (usually <code>.eslintrc.js</code>). The issue there is your formatting is made via
|
|
||||||
prettierd.</p>
|
|
||||||
<p>This results in auto-formatting relying on your prettier configuration, while
|
|
||||||
your Eslint configuration diagnoses formatting "issues" while it's
|
|
||||||
<a href="https://prettier.io/docs/en/comparison.html">not supposed to</a>. In the end, you get discrepancies between what your editor
|
|
||||||
does and what it wants.</p>
|
|
||||||
<p>Solutions are:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Don't add a formatting config to Eslint, instead separate Prettier and
|
|
||||||
Eslint.</li>
|
|
||||||
<li>PR the repo in question to add an ESLint formatter, and configure <strong>nvf</strong> to
|
|
||||||
use it.</li>
|
|
||||||
</ol>
|
|
||||||
<h2 id="ch-bugs-suggestions">Bugs & Suggestions</h2>
|
|
||||||
<p>Some quirks are not exactly quirks, but bugs in the module system. If you notice
|
|
||||||
any issues with <strong>nvf</strong>, or this documentation, then please consider reporting
|
|
||||||
them over at the <a href="https://github.com/notashelf/nvf/issues">issue tracker</a>. Issues tab, in addition to the
|
|
||||||
<a href="https://github.com/notashelf/nvf/discussions">discussions tab</a> is a good place as any to request new features.</p>
|
|
||||||
<p>You may also consider submitting bug fixes, feature additions and upstreamed
|
|
||||||
changes that you think are critical over at the <a href="https://github.com/notashelf/nvf/pulls">pull requests tab</a>.</p>
|
|
||||||
</body></html></main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<aside class="page-toc">
|
|
||||||
<nav class="page-toc-nav">
|
|
||||||
<h3>On this page</h3>
|
|
||||||
<ul class="page-toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,140 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>NVF - Search</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
id="search-results"
|
|
||||||
class="search-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav id="sidebar" class="sidebar">
|
|
||||||
<div class="docs-nav">
|
|
||||||
<h2>Documents</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toc">
|
|
||||||
<h2>Contents</h2>
|
|
||||||
<ul class="toc-list">
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
<h1>Search</h1>
|
|
||||||
<div class="search-page">
|
|
||||||
<div class="search-form">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-page-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
autofocus
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="search-keyboard-hints" role="note" aria-label="Keyboard shortcuts">
|
|
||||||
<span class="hint-item"><kbd>↑</kbd> <kbd>↓</kbd> to navigate</span>
|
|
||||||
<span class="hint-item"><kbd>Enter</kbd> to select</span>
|
|
||||||
<span class="hint-item"><kbd>Esc</kbd> to clear</span>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
id="search-page-results"
|
|
||||||
class="search-page-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div class="footnotes-container">
|
|
||||||
<!-- Footnotes will be appended here -->
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
|
@ -1,298 +0,0 @@
|
||||||
const isWordBoundary = (char) =>
|
|
||||||
/[A-Z]/.test(char) || /[-_\/.]/.test(char) || /\s/.test(char);
|
|
||||||
|
|
||||||
const isCaseTransition = (prev, curr) => {
|
|
||||||
const prevIsUpper = prev.toLowerCase() !== prev;
|
|
||||||
const currIsUpper = curr.toLowerCase() !== curr;
|
|
||||||
return (
|
|
||||||
prevIsUpper && currIsUpper && prev.toLowerCase() !== curr.toLowerCase()
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const findBestSubsequenceMatch = (query, target) => {
|
|
||||||
const n = query.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0 || m === 0) return null;
|
|
||||||
|
|
||||||
const positions = [];
|
|
||||||
|
|
||||||
const memo = new Map();
|
|
||||||
const key = (qIdx, tIdx, gap) => `${qIdx}:${tIdx}:${gap}`;
|
|
||||||
|
|
||||||
const findBest = (qIdx, tIdx, currentGap) => {
|
|
||||||
if (qIdx === n) {
|
|
||||||
return { done: true, positions: [...positions], gap: currentGap };
|
|
||||||
}
|
|
||||||
|
|
||||||
const memoKey = key(qIdx, tIdx, currentGap);
|
|
||||||
if (memo.has(memoKey)) {
|
|
||||||
return memo.get(memoKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
let bestResult = null;
|
|
||||||
|
|
||||||
for (let i = tIdx; i < m; i++) {
|
|
||||||
if (target[i] === query[qIdx]) {
|
|
||||||
positions.push(i);
|
|
||||||
const gap = qIdx === 0 ? 0 : i - positions[positions.length - 2] - 1;
|
|
||||||
const newGap = currentGap + gap;
|
|
||||||
|
|
||||||
if (newGap > m) {
|
|
||||||
positions.pop();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = findBest(qIdx + 1, i + 1, newGap);
|
|
||||||
positions.pop();
|
|
||||||
|
|
||||||
if (result && (!bestResult || result.gap < bestResult.gap)) {
|
|
||||||
bestResult = result;
|
|
||||||
if (result.gap === 0) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memo.set(memoKey, bestResult);
|
|
||||||
return bestResult;
|
|
||||||
};
|
|
||||||
|
|
||||||
const result = findBest(0, 0, 0);
|
|
||||||
if (!result) return null;
|
|
||||||
|
|
||||||
const consecutive = (() => {
|
|
||||||
let c = 1;
|
|
||||||
for (let i = 1; i < result.positions.length; i++) {
|
|
||||||
if (result.positions[i] === result.positions[i - 1] + 1) {
|
|
||||||
c++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
})();
|
|
||||||
|
|
||||||
return {
|
|
||||||
positions: result.positions,
|
|
||||||
consecutive,
|
|
||||||
score: calculateMatchScore(query, target, result.positions, consecutive),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const calculateMatchScore = (query, target, positions, consecutive) => {
|
|
||||||
const n = positions.length;
|
|
||||||
const m = target.length;
|
|
||||||
|
|
||||||
if (n === 0) return 0;
|
|
||||||
|
|
||||||
let score = 1.0;
|
|
||||||
|
|
||||||
const startBonus = (m - positions[0]) / m;
|
|
||||||
score += startBonus * 0.5;
|
|
||||||
|
|
||||||
let gapPenalty = 0;
|
|
||||||
for (let i = 1; i < n; i++) {
|
|
||||||
const gap = positions[i] - positions[i - 1] - 1;
|
|
||||||
if (gap > 0) {
|
|
||||||
gapPenalty += Math.min(gap / m, 1.0) * 0.3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score -= gapPenalty;
|
|
||||||
|
|
||||||
const consecutiveBonus = consecutive / n;
|
|
||||||
score += consecutiveBonus * 0.3;
|
|
||||||
|
|
||||||
let boundaryBonus = 0;
|
|
||||||
for (let i = 0; i < n; i++) {
|
|
||||||
const char = target[positions[i]];
|
|
||||||
if (i === 0 || isWordBoundary(char)) {
|
|
||||||
boundaryBonus += 0.05;
|
|
||||||
}
|
|
||||||
if (i > 0) {
|
|
||||||
const prevChar = target[positions[i - 1]];
|
|
||||||
if (isCaseTransition(prevChar, char)) {
|
|
||||||
boundaryBonus += 0.03;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
score = Math.min(1.0, score + boundaryBonus);
|
|
||||||
|
|
||||||
const lengthPenalty = Math.abs(query.length - n) / Math.max(query.length, m);
|
|
||||||
score -= lengthPenalty * 0.2;
|
|
||||||
|
|
||||||
return Math.max(0, Math.min(1.0, score));
|
|
||||||
};
|
|
||||||
|
|
||||||
const fuzzyMatch = (query, target) => {
|
|
||||||
const lowerQuery = query.toLowerCase();
|
|
||||||
const lowerTarget = target.toLowerCase();
|
|
||||||
|
|
||||||
if (lowerQuery.length === 0) return null;
|
|
||||||
if (lowerTarget.length === 0) return null;
|
|
||||||
|
|
||||||
if (lowerTarget === lowerQuery) {
|
|
||||||
return 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lowerTarget.includes(lowerQuery)) {
|
|
||||||
const ratio = lowerQuery.length / lowerTarget.length;
|
|
||||||
return 0.8 + ratio * 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
const match = findBestSubsequenceMatch(lowerQuery, lowerTarget);
|
|
||||||
if (!match) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.min(1.0, match.score);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.onmessage = function (e) {
|
|
||||||
const { messageId, type, data } = e.data;
|
|
||||||
|
|
||||||
const respond = (type, data) => {
|
|
||||||
self.postMessage({ messageId, type, data });
|
|
||||||
};
|
|
||||||
|
|
||||||
const respondError = (error) => {
|
|
||||||
self.postMessage({
|
|
||||||
messageId,
|
|
||||||
type: "error",
|
|
||||||
error: error.message || String(error),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (type === "tokenize") {
|
|
||||||
const text = typeof data === "string" ? data : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const tokens = words.filter((word) => word.length > 2);
|
|
||||||
const uniqueTokens = Array.from(new Set(tokens));
|
|
||||||
respond("tokens", uniqueTokens);
|
|
||||||
} else if (type === "search") {
|
|
||||||
const { query, limit = 10 } = data;
|
|
||||||
|
|
||||||
if (!query || typeof query !== "string") {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const rawQuery = query.toLowerCase();
|
|
||||||
const text = typeof query === "string" ? query : "";
|
|
||||||
const words = text.toLowerCase().match(/\b[a-zA-Z0-9_-]+\b/g) || [];
|
|
||||||
const searchTerms = words.filter((word) => word.length > 2);
|
|
||||||
|
|
||||||
let documents = [];
|
|
||||||
if (typeof data.documents === "string") {
|
|
||||||
documents = JSON.parse(data.documents);
|
|
||||||
} else if (Array.isArray(data.documents)) {
|
|
||||||
documents = data.documents;
|
|
||||||
} else if (typeof data.transferables === "string") {
|
|
||||||
documents = JSON.parse(data.transferables);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!Array.isArray(documents) || documents.length === 0) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const useFuzzySearch = rawQuery.length >= 3;
|
|
||||||
|
|
||||||
if (searchTerms.length === 0 && rawQuery.length < 3) {
|
|
||||||
respond("results", []);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const pageMatches = new Map();
|
|
||||||
|
|
||||||
// Pre-compute lower-case strings for each document
|
|
||||||
const processedDocs = documents.map((doc, docId) => {
|
|
||||||
const title = typeof doc.title === "string" ? doc.title : "";
|
|
||||||
const content = typeof doc.content === "string" ? doc.content : "";
|
|
||||||
|
|
||||||
return {
|
|
||||||
docId,
|
|
||||||
doc,
|
|
||||||
lowerTitle: title.toLowerCase(),
|
|
||||||
lowerContent: content.toLowerCase(),
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
// First pass: Score pages with fuzzy matching
|
|
||||||
processedDocs.forEach(({ docId, doc, lowerTitle, lowerContent }) => {
|
|
||||||
let match = pageMatches.get(docId);
|
|
||||||
if (!match) {
|
|
||||||
match = { doc, pageScore: 0, matchingAnchors: [] };
|
|
||||||
pageMatches.set(docId, match);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyTitleScore = fuzzyMatch(rawQuery, lowerTitle);
|
|
||||||
if (fuzzyTitleScore !== null) {
|
|
||||||
match.pageScore += fuzzyTitleScore * 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fuzzyContentScore = fuzzyMatch(rawQuery, lowerContent);
|
|
||||||
if (fuzzyContentScore !== null) {
|
|
||||||
match.pageScore += fuzzyContentScore * 30;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Token-based exact matching
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (lowerTitle.includes(term)) {
|
|
||||||
match.pageScore += lowerTitle === term ? 20 : 10;
|
|
||||||
}
|
|
||||||
if (lowerContent.includes(term)) {
|
|
||||||
match.pageScore += 2;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Second pass: Find matching anchors
|
|
||||||
pageMatches.forEach((match) => {
|
|
||||||
const doc = match.doc;
|
|
||||||
if (
|
|
||||||
!doc.anchors ||
|
|
||||||
!Array.isArray(doc.anchors) ||
|
|
||||||
doc.anchors.length === 0
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
doc.anchors.forEach((anchor) => {
|
|
||||||
if (!anchor || !anchor.text) return;
|
|
||||||
|
|
||||||
const anchorText = anchor.text.toLowerCase();
|
|
||||||
let anchorMatches = false;
|
|
||||||
|
|
||||||
if (useFuzzySearch) {
|
|
||||||
const fuzzyScore = fuzzyMatch(rawQuery, anchorText);
|
|
||||||
if (fuzzyScore !== null && fuzzyScore >= 0.4) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!anchorMatches) {
|
|
||||||
searchTerms.forEach((term) => {
|
|
||||||
if (anchorText.includes(term)) {
|
|
||||||
anchorMatches = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (anchorMatches) {
|
|
||||||
match.matchingAnchors.push(anchor);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const results = Array.from(pageMatches.values())
|
|
||||||
.filter((m) => m.pageScore > 5)
|
|
||||||
.sort((a, b) => b.pageScore - a.pageScore)
|
|
||||||
.slice(0, limit);
|
|
||||||
|
|
||||||
respond("results", results);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
respondError(error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
|
@ -1,157 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>Known Issues and Quirks</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input type="text" id="search-input" placeholder="Search..." />
|
|
||||||
<div id="search-results" class="search-results"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav class="sidebar">
|
|
||||||
<details class="sidebar-section" data-section="docs" open>
|
|
||||||
<summary>Documents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<details class="sidebar-section" data-section="toc" open>
|
|
||||||
<summary>Contents</summary>
|
|
||||||
<div class="sidebar-section-content">
|
|
||||||
<ul class="toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content"><html><head></head><body><h1 id="ch-known-issues-quirks">Known Issues and Quirks</h1>
|
|
||||||
<p>At times, certain plugins and modules may refuse to play nicely with your setup,
|
|
||||||
be it a result of generating Lua from Nix, or the state of packaging. This page,
|
|
||||||
in turn, will list any known modules or plugins that are known to misbehave, and
|
|
||||||
possible workarounds that you may apply.</p>
|
|
||||||
<h2 id="ch-quirks-nodejs">NodeJS</h2>
|
|
||||||
<h3 id="sec-eslint-plugin-prettier">eslint-plugin-prettier</h3>
|
|
||||||
<p>When working with NodeJS, which is <em>obviously</em> known for its meticulous
|
|
||||||
standards, most things are bound to work as expected but some projects, tools
|
|
||||||
and settings may fool the default configurations of tools provided by <strong>nvf</strong>.</p>
|
|
||||||
<p>If <a href="https://github.com/prettier/eslint-plugin-prettier">eslint-plugin-prettier</a> or similar is included, you might get a situation
|
|
||||||
where your Eslint configuration diagnoses your formatting according to its own
|
|
||||||
config (usually <code>.eslintrc.js</code>). The issue there is your formatting is made via
|
|
||||||
prettierd.</p>
|
|
||||||
<p>This results in auto-formatting relying on your prettier configuration, while
|
|
||||||
your Eslint configuration diagnoses formatting "issues" while it's
|
|
||||||
<a href="https://prettier.io/docs/en/comparison.html">not supposed to</a>. In the end, you get discrepancies between what your editor
|
|
||||||
does and what it wants.</p>
|
|
||||||
<p>Solutions are:</p>
|
|
||||||
<ol>
|
|
||||||
<li>Don't add a formatting config to Eslint, instead separate Prettier and
|
|
||||||
Eslint.</li>
|
|
||||||
<li>PR the repo in question to add an ESLint formatter, and configure <strong>nvf</strong> to
|
|
||||||
use it.</li>
|
|
||||||
</ol>
|
|
||||||
<h2 id="ch-bugs-suggestions">Bugs & Suggestions</h2>
|
|
||||||
<p>Some quirks are not exactly quirks, but bugs in the module system. If you notice
|
|
||||||
any issues with <strong>nvf</strong>, or this documentation, then please consider reporting
|
|
||||||
them over at the <a href="https://github.com/notashelf/nvf/issues">issue tracker</a>. Issues tab, in addition to the
|
|
||||||
<a href="https://github.com/notashelf/nvf/discussions">discussions tab</a> is a good place as any to request new features.</p>
|
|
||||||
<p>You may also consider submitting bug fixes, feature additions and upstreamed
|
|
||||||
changes that you think are critical over at the <a href="https://github.com/notashelf/nvf/pulls">pull requests tab</a>.</p>
|
|
||||||
</body></html></main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<aside class="page-toc">
|
|
||||||
<nav class="page-toc-nav">
|
|
||||||
<h3>On this page</h3>
|
|
||||||
<ul class="page-toc-list">
|
|
||||||
<li><a href="#ch-known-issues-quirks">Known Issues and Quirks</a>
|
|
||||||
<ul><li><a href="#ch-quirks-nodejs">NodeJS</a>
|
|
||||||
<ul><li><a href="#sec-eslint-plugin-prettier">eslint-plugin-prettier</a>
|
|
||||||
</ul><li><a href="#ch-bugs-suggestions">Bugs & Suggestions</a>
|
|
||||||
</li></ul></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</aside>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,140 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>NVF - Search</title>
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Apply sidebar state immediately to prevent flash
|
|
||||||
(function () {
|
|
||||||
try {
|
|
||||||
if (localStorage.getItem("sidebar-collapsed") === "true") {
|
|
||||||
document.documentElement.classList.add("sidebar-collapsed");
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
// localStorage unavailable
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<link rel="stylesheet" href="assets/style.css" />
|
|
||||||
<script defer src="assets/main.js"></script>
|
|
||||||
<script>
|
|
||||||
window.searchNamespace = window.searchNamespace || {};
|
|
||||||
window.searchNamespace.rootPath = "";
|
|
||||||
</script>
|
|
||||||
<script defer src="assets/search.js"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<header>
|
|
||||||
<div class="header-left">
|
|
||||||
<h1 class="site-title">
|
|
||||||
<a href="index.html">NVF</a>
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
<nav class="header-nav">
|
|
||||||
<ul>
|
|
||||||
<li >
|
|
||||||
<a href="options.html">Options</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<div class="search-container">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
id="search-results"
|
|
||||||
class="search-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="layout">
|
|
||||||
<div class="sidebar-toggle" aria-label="Toggle sidebar">
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
>
|
|
||||||
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"></path>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
<nav id="sidebar" class="sidebar">
|
|
||||||
<div class="docs-nav">
|
|
||||||
<h2>Documents</h2>
|
|
||||||
<ul>
|
|
||||||
<li><a href="index.html">Introduction</a></li>
|
|
||||||
<li><a href="configuring.html">Configuring nvf</a></li>
|
|
||||||
<li><a href="hacking.html">Hacking nvf</a></li>
|
|
||||||
<li><a href="tips.html">Helpful Tips</a></li>
|
|
||||||
<li><a href="quirks.html">Known Issues and Quirks</a></li>
|
|
||||||
<li><a href="release-notes.html">Release Notes</a></li>
|
|
||||||
<li><a href="search.html">Search</a></li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="toc">
|
|
||||||
<h2>Contents</h2>
|
|
||||||
<ul class="toc-list">
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="content">
|
|
||||||
<h1>Search</h1>
|
|
||||||
<div class="search-page">
|
|
||||||
<div class="search-form">
|
|
||||||
<input
|
|
||||||
type="search"
|
|
||||||
id="search-page-input"
|
|
||||||
placeholder="Search..."
|
|
||||||
aria-label="Search"
|
|
||||||
autocomplete="off"
|
|
||||||
autofocus
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div class="search-keyboard-hints" role="note" aria-label="Keyboard shortcuts">
|
|
||||||
<span class="hint-item"><kbd>↑</kbd> <kbd>↓</kbd> to navigate</span>
|
|
||||||
<span class="hint-item"><kbd>Enter</kbd> to select</span>
|
|
||||||
<span class="hint-item"><kbd>Esc</kbd> to clear</span>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
id="search-page-results"
|
|
||||||
class="search-page-results"
|
|
||||||
role="region"
|
|
||||||
aria-live="polite"
|
|
||||||
aria-label="Search results"
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
<div class="footnotes-container">
|
|
||||||
<!-- Footnotes will be appended here -->
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer>
|
|
||||||
<p>Generated with ndg</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
File diff suppressed because one or more lines are too long
43
options.html
43
options.html
|
|
@ -12897,20 +12897,12 @@
|
||||||
<details class="toc-category">
|
<details class="toc-category">
|
||||||
<summary title="vim.notes">
|
<summary title="vim.notes">
|
||||||
<span>vim.notes</span>
|
<span>vim.notes</span>
|
||||||
<span class="toc-count">26</span>
|
<span class="toc-count">25</span>
|
||||||
</summary>
|
</summary>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<a href='#option-vim.notes.mind-nvim.enable' title="vim.notes.mind-nvim.enable">
|
|
||||||
mind-nvim.enable
|
|
||||||
|
|
||||||
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li>
|
<li>
|
||||||
<a href='#option-vim.notes.neorg.enable' title="vim.notes.neorg.enable">
|
<a href='#option-vim.notes.neorg.enable' title="vim.notes.neorg.enable">
|
||||||
neorg.enable
|
neorg.enable
|
||||||
|
|
@ -22406,7 +22398,7 @@ vim.autocomplete.blink-cmp.setupOpts.keymap = {
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p><code>blink-cmp</code> source plugin package.</p>
|
<div class="option-description"><html><head></head><body><p><code>blink-cmp</code> source plugin package.</p>
|
||||||
</body></html></div>
|
</body></html></div>
|
||||||
<div class="option-declared">Declared in: <code>vim.autocomplete.blink-cmp.sourcePlugins.<name>.package</code></div>
|
<div class="option-declared">Declared in: <code>vim.autocomplete.blink-cmp.sourcePlugins.<name>.package</code></div>
|
||||||
|
|
@ -22442,7 +22434,7 @@ vim.autocomplete.blink-cmp.setupOpts.keymap = {
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p><code>blink-cmp</code> emoji source plugin package.</p>
|
<div class="option-description"><html><head></head><body><p><code>blink-cmp</code> emoji source plugin package.</p>
|
||||||
</body></html></div>
|
</body></html></div>
|
||||||
<div class="option-default">Default: <code>"blink-emoji-nvim"</code></div>
|
<div class="option-default">Default: <code>"blink-emoji-nvim"</code></div>
|
||||||
|
|
@ -22479,7 +22471,7 @@ vim.autocomplete.blink-cmp.setupOpts.keymap = {
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p><code>blink-cmp</code> ripgrep source plugin package.</p>
|
<div class="option-description"><html><head></head><body><p><code>blink-cmp</code> ripgrep source plugin package.</p>
|
||||||
</body></html></div>
|
</body></html></div>
|
||||||
<div class="option-default">Default: <code>"blink-ripgrep-nvim"</code></div>
|
<div class="option-default">Default: <code>"blink-ripgrep-nvim"</code></div>
|
||||||
|
|
@ -22516,7 +22508,7 @@ vim.autocomplete.blink-cmp.setupOpts.keymap = {
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p><code>blink-cmp</code> spell source plugin package.</p>
|
<div class="option-description"><html><head></head><body><p><code>blink-cmp</code> spell source plugin package.</p>
|
||||||
</body></html></div>
|
</body></html></div>
|
||||||
<div class="option-default">Default: <code>"blink-cmp-spell"</code></div>
|
<div class="option-default">Default: <code>"blink-cmp-spell"</code></div>
|
||||||
|
|
@ -22722,7 +22714,7 @@ lowest.</p>
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>list of (null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat")</code></div>
|
<div class="option-type">Type: <code>list of (null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat")</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p>List of source plugins used by nvim-cmp.</p>
|
<div class="option-description"><html><head></head><body><p>List of source plugins used by nvim-cmp.</p>
|
||||||
</body></html></div>
|
</body></html></div>
|
||||||
<div class="option-default">Default: <code>[ ]</code></div>
|
<div class="option-default">Default: <code>[ ]</code></div>
|
||||||
|
|
@ -24431,7 +24423,7 @@ with pkgs.vimPlugins; {
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
<div class="option-type">Type: <code>null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p>Plugin Package.</p>
|
<div class="option-description"><html><head></head><body><p>Plugin Package.</p>
|
||||||
</body></html></div>
|
</body></html></div>
|
||||||
<div class="option-declared">Declared in: <code><a href="https://github.com/NotAShelf/nvf/blob/main/modules/wrapper/environment/options.nix" target="_blank"><nvf/modules/wrapper/environment/options.nix></a></code></div>
|
<div class="option-declared">Declared in: <code><a href="https://github.com/NotAShelf/nvf/blob/main/modules/wrapper/environment/options.nix" target="_blank"><nvf/modules/wrapper/environment/options.nix></a></code></div>
|
||||||
|
|
@ -35161,7 +35153,7 @@ a valid lazy-load condition is set e.g. <code>cmd</code>, <code>ft</code>, <code
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>null or null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
<div class="option-type">Type: <code>null or null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat"</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p>Plugin package.</p>
|
<div class="option-description"><html><head></head><body><p>Plugin package.</p>
|
||||||
<p>If null, a custom load function must be provided</p>
|
<p>If null, a custom load function must be provided</p>
|
||||||
</body></html></div>
|
</body></html></div>
|
||||||
|
|
@ -40387,19 +40379,6 @@ list will be sync'd back to the fs</p>
|
||||||
<div class="option-default">Default: <code>false</code></div>
|
<div class="option-default">Default: <code>false</code></div>
|
||||||
<div class="option-declared">Declared in: <code><a href="https://github.com/NotAShelf/nvf/blob/main/modules/plugins/utility/harpoon/harpoon.nix" target="_blank"><nvf/modules/plugins/utility/harpoon/harpoon.nix></a></code></div>
|
<div class="option-declared">Declared in: <code><a href="https://github.com/NotAShelf/nvf/blob/main/modules/plugins/utility/harpoon/harpoon.nix" target="_blank"><nvf/modules/plugins/utility/harpoon/harpoon.nix></a></code></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="option" id="option-vim.notes.mind-nvim.enable">
|
|
||||||
<h3 class="option-name">
|
|
||||||
<a href="#option-vim.notes.mind-nvim.enable" class="option-anchor">vim.notes.mind-nvim.enable</a>
|
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
|
||||||
<span class="copy-feedback">Link copied!</span>
|
|
||||||
</h3>
|
|
||||||
<div class="option-type">Type: <code>boolean</code></div>
|
|
||||||
<div class="option-description"><html><head></head><body><p>Whether to enable note organizer tool for Neovim [mind-nvim].</p>
|
|
||||||
</body></html></div>
|
|
||||||
<div class="option-default">Default: <code>false</code></div>
|
|
||||||
<div class="option-example">Example: <code>true</code></div>
|
|
||||||
<div class="option-declared">Declared in: <code><a href="https://github.com/NotAShelf/nvf/blob/main/modules/plugins/notes/mind-nvim/mind-nvim.nix" target="_blank"><nvf/modules/plugins/notes/mind-nvim/mind-nvim.nix></a></code></div>
|
|
||||||
</div>
|
|
||||||
<div class="option" id="option-vim.notes.neorg.enable">
|
<div class="option" id="option-vim.notes.neorg.enable">
|
||||||
<h3 class="option-name">
|
<h3 class="option-name">
|
||||||
<a href="#option-vim.notes.neorg.enable" class="option-anchor">vim.notes.neorg.enable</a>
|
<a href="#option-vim.notes.neorg.enable" class="option-anchor">vim.notes.neorg.enable</a>
|
||||||
|
|
@ -40853,7 +40832,7 @@ not listed in the docs</p>
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>list of (null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat")</code></div>
|
<div class="option-type">Type: <code>list of (null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat")</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p>List of plugins to optionally load on startup.</p>
|
<div class="option-description"><html><head></head><body><p>List of plugins to optionally load on startup.</p>
|
||||||
<p>This option has the same type definition as <a class="option-reference" href="options.html#option-vim.startPlugins"><code class="nixos-option">vim.startPlugins</code></a>
|
<p>This option has the same type definition as <a class="option-reference" href="options.html#option-vim.startPlugins"><code class="nixos-option">vim.startPlugins</code></a>
|
||||||
and plugins in this list are appended to <a class="option-reference" href="options.html#option-vim.startPlugins"><code class="nixos-option">vim.startPlugins</code></a> by
|
and plugins in this list are appended to <a class="option-reference" href="options.html#option-vim.startPlugins"><code class="nixos-option">vim.startPlugins</code></a> by
|
||||||
|
|
@ -42115,7 +42094,7 @@ require("luasnip.loaders.from_snipmate").lazy_load()
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>list of (null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat")</code></div>
|
<div class="option-type">Type: <code>list of (null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat")</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p>The snippet provider packages.</p>
|
<div class="option-description"><html><head></head><body><p>The snippet provider packages.</p>
|
||||||
<div class="admonition note">
|
<div class="admonition note">
|
||||||
<p class="admonition-title">Note</p>
|
<p class="admonition-title">Note</p>
|
||||||
|
|
@ -42287,7 +42266,7 @@ depends on spellchecking having been set up.</p>
|
||||||
<span class="copy-link" title="Copy link to this option"></span>
|
<span class="copy-link" title="Copy link to this option"></span>
|
||||||
<span class="copy-feedback">Link copied!</span>
|
<span class="copy-feedback">Link copied!</span>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="option-type">Type: <code>list of (null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mind-nvim", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat")</code></div>
|
<div class="option-type">Type: <code>list of (null or package or one of "blink-cmp", "aerial-nvim", "alpha-nvim", "avante-nvim", "base16", "blink-cmp-spell", "blink-compat", "blink-emoji-nvim", "blink-indent", "blink-ripgrep-nvim", "bufdelete-nvim", "bufferline-nvim", "catppuccin", "ccc-nvim", "cellular-automaton-nvim", "chatgpt-nvim", "cheatsheet-nvim", "cinnamon-nvim", "cmp-buffer", "cmp-luasnip", "cmp-nvim-lsp", "cmp-path", "cmp-treesitter", "codecompanion-nvim", "codewindow-nvim", "colorful-menu-nvim", "comment-nvim", "conform-nvim", "copilot-cmp", "copilot-lua", "crates-nvim", "crazy-coverage", "csharpls-extended-lsp-nvim", "dashboard-nvim", "diffview-nvim", "direnv-vim", "dracula", "dressing-nvim", "elixir-tools-nvim", "everforest", "fastaction-nvim", "fidget-nvim", "flash-nvim", "fluent-nvim", "flutter-tools-nvim", "friendly-snippets", "fzf-lua", "gesture-nvim", "git-conflict-nvim", "github", "gitlinker-nvim", "gitsigns-nvim", "glow-nvim", "gopher-nvim", "gradle-nvim", "gruber-darker", "grug-far-nvim", "gruvbox", "hardtime-nvim", "harpoon", "haskell-tools-nvim", "highlight-undo-nvim", "hlargs-nvim", "hop.nvim", "hunk-nvim", "hydra-nvim", "icon-picker-nvim", "image-nvim", "img-clip", "indent-blankline-nvim", "lazydev-nvim", "leap-nvim", "leetcode-nvim", "lsp-signature-nvim", "lspkind-nvim", "lspsaga-nvim", "lua-utils-nvim", "lualine-nvim", "luasnip", "lz-n", "lzn-auto-require", "markview-nvim", "maven-nvim", "mellow", "mini-ai", "mini-align", "mini-animate", "mini-base16", "mini-basics", "mini-bracketed", "mini-bufremove", "mini-clue", "mini-colors", "mini-comment", "mini-completion", "mini-cursorword", "mini-diff", "mini-doc", "mini-extra", "mini-files", "mini-fuzzy", "mini-git", "mini-hipatterns", "mini-hues", "mini-icons", "mini-indentscope", "mini-jump", "mini-jump2d", "mini-map", "mini-misc", "mini-move", "mini-notify", "mini-operators", "mini-pairs", "mini-pick", "mini-sessions", "mini-snippets", "mini-splitjoin", "mini-starter", "mini-statusline", "mini-surround", "mini-tabline", "mini-test", "mini-trailspace", "mini-visits", "minimap-vim", "mkdir-nvim", "modes-nvim", "multicursors-nvim", "neo-tree-nvim", "neocodeium", "neocord", "neogit", "neorg", "neorg-telescope", "neovim-session-manager", "new-file-template-nvim", "nix-develop-nvim", "noice-nvim", "none-ls-nvim", "nord", "nui-nvim", "nvim-autopairs", "nvim-biscuits", "nvim-cmp", "nvim-colorizer-lua", "nvim-cursorline", "nvim-dap", "nvim-dap-go", "nvim-dap-odin", "nvim-dap-ui", "nvim-docs-view", "nvim-highlight-colors", "nvim-lightbulb", "nvim-lint", "nvim-lspconfig", "nvim-metals", "nvim-navbuddy", "nvim-navic", "nvim-neoclip-lua", "nvim-nio", "nvim-notify", "nvim-scrollbar", "nvim-surround", "nvim-tree-lua", "nvim-treesitter-context", "nvim-treesitter-textobjects", "nvim-ts-autotag", "nvim-ufo", "nvim-web-devicons", "obsidian-nvim", "oil-git-status.nvim", "oil-nvim", "omnisharp-extended-lsp-nvim", "onedark", "orgmode", "otter-nvim", "oxocarbon", "pathlib-nvim", "plenary-nvim", "precognition-nvim", "prettier-plugin-astro", "prettier-plugin-svelte", "project-nvim", "promise-async", "qmk-nvim", "rainbow-delimiters-nvim", "registers-nvim", "render-markdown-nvim", "rose-pine", "roslyn-nvim", "rtp-nvim", "run-nvim", "rustaceanvim", "smart-splits", "smartcolumn-nvim", "snacks-nvim", "solarized", "solarized-osaka", "sqls-nvim", "supermaven-nvim", "syntax-gaslighting", "tabular", "telescope", "tiny-devicons-auto-colors-nvim", "todo-comments-nvim", "toggleterm-nvim", "tokyonight", "trouble", "ts-error-translator-nvim", "typst-concealer", "typst-preview-nvim", "undotree", "vim-dirtytalk", "vim-fugitive", "vim-illuminate", "vim-markdown", "vim-repeat", "vim-sleuth", "vim-startify", "vim-wakatime", "which-key-nvim", "yanky-nvim", "nvim-treesitter", "flutter-tools-patched", "vim-repeat")</code></div>
|
||||||
<div class="option-description"><html><head></head><body><p>List of plugins to load on startup. This is used
|
<div class="option-description"><html><head></head><body><p>List of plugins to load on startup. This is used
|
||||||
internally to add plugins to Neovim's runtime.</p>
|
internally to add plugins to Neovim's runtime.</p>
|
||||||
<p>To add additional plugins to your configuration, consider
|
<p>To add additional plugins to your configuration, consider
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,13 @@ upstream codecompanion.nvim v19 rename. If you set options like
|
||||||
<p><a href="https://github.com/snoweuph">Snoweuph</a></p>
|
<p><a href="https://github.com/snoweuph">Snoweuph</a></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
|
<p>Remove <code>mind.nvim</code>. This plugin doesn't exist anymore. The original author
|
||||||
|
deleted all their GitHub repositories and moved to
|
||||||
|
<a href="https://sr.ht/~hadronized/">sourcehut</a>. Some repositories where migrated.
|
||||||
|
<code>mind.nvim</code> wasn't one of them. More can be read in
|
||||||
|
<a href="https://strongly-typed-thoughts.net/blog/final-bye-github">his blog post</a>.</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
<p>"Correct <code>languages.go.treesitter</code> to contain all Go file types.
|
<p>"Correct <code>languages.go.treesitter</code> to contain all Go file types.
|
||||||
<code>languages.go.treesitter.package</code> is now <code>languages.go.treesitter.goPackage</code>.
|
<code>languages.go.treesitter.package</code> is now <code>languages.go.treesitter.goPackage</code>.
|
||||||
New are:</p>
|
New are:</p>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue