@proxysoul/soulforge 2.18.6 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1771 -659
- package/dist/workers/intelligence.worker.js +623 -85
- package/dist/workers/io.worker.js +2 -1
- package/package.json +3 -1
|
@@ -18416,6 +18416,378 @@ var init_file_tree = __esm(() => {
|
|
|
18416
18416
|
IGNORED_DIRS = new Set(["node_modules", ".git", "dist", "build", ".next", ".nuxt", "target", "__pycache__", ".cache", ".soulforge", "coverage"]);
|
|
18417
18417
|
});
|
|
18418
18418
|
|
|
18419
|
+
// node_modules/ignore/index.js
|
|
18420
|
+
var require_ignore = __commonJS((exports, module2) => {
|
|
18421
|
+
function makeArray(subject) {
|
|
18422
|
+
return Array.isArray(subject) ? subject : [subject];
|
|
18423
|
+
}
|
|
18424
|
+
var UNDEFINED = undefined;
|
|
18425
|
+
var EMPTY = "";
|
|
18426
|
+
var SPACE = " ";
|
|
18427
|
+
var ESCAPE = "\\";
|
|
18428
|
+
var REGEX_TEST_BLANK_LINE = /^\s+$/;
|
|
18429
|
+
var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/;
|
|
18430
|
+
var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/;
|
|
18431
|
+
var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/;
|
|
18432
|
+
var REGEX_SPLITALL_CRLF = /\r?\n/g;
|
|
18433
|
+
var REGEX_TEST_INVALID_PATH = /^\.{0,2}\/|^\.{1,2}$/;
|
|
18434
|
+
var REGEX_TEST_TRAILING_SLASH = /\/$/;
|
|
18435
|
+
var SLASH = "/";
|
|
18436
|
+
var TMP_KEY_IGNORE = "node-ignore";
|
|
18437
|
+
if (typeof Symbol !== "undefined") {
|
|
18438
|
+
TMP_KEY_IGNORE = Symbol.for("node-ignore");
|
|
18439
|
+
}
|
|
18440
|
+
var KEY_IGNORE = TMP_KEY_IGNORE;
|
|
18441
|
+
var define = (object, key2, value) => {
|
|
18442
|
+
Object.defineProperty(object, key2, { value });
|
|
18443
|
+
return value;
|
|
18444
|
+
};
|
|
18445
|
+
var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g;
|
|
18446
|
+
var RETURN_FALSE = () => false;
|
|
18447
|
+
var sanitizeRange = (range2) => range2.replace(REGEX_REGEXP_RANGE, (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0) ? match : EMPTY);
|
|
18448
|
+
var cleanRangeBackSlash = (slashes) => {
|
|
18449
|
+
const { length } = slashes;
|
|
18450
|
+
return slashes.slice(0, length - length % 2);
|
|
18451
|
+
};
|
|
18452
|
+
var REPLACERS = [
|
|
18453
|
+
[
|
|
18454
|
+
/^\uFEFF/,
|
|
18455
|
+
() => EMPTY
|
|
18456
|
+
],
|
|
18457
|
+
[
|
|
18458
|
+
/((?:\\\\)*?)(\\?\s+)$/,
|
|
18459
|
+
(_3, m1, m22) => m1 + (m22.indexOf("\\") === 0 ? SPACE : EMPTY)
|
|
18460
|
+
],
|
|
18461
|
+
[
|
|
18462
|
+
/(\\+?)\s/g,
|
|
18463
|
+
(_3, m1) => {
|
|
18464
|
+
const { length } = m1;
|
|
18465
|
+
return m1.slice(0, length - length % 2) + SPACE;
|
|
18466
|
+
}
|
|
18467
|
+
],
|
|
18468
|
+
[
|
|
18469
|
+
/[\\$.|*+(){^]/g,
|
|
18470
|
+
(match) => `\\${match}`
|
|
18471
|
+
],
|
|
18472
|
+
[
|
|
18473
|
+
/(?!\\)\?/g,
|
|
18474
|
+
() => "[^/]"
|
|
18475
|
+
],
|
|
18476
|
+
[
|
|
18477
|
+
/^\//,
|
|
18478
|
+
() => "^"
|
|
18479
|
+
],
|
|
18480
|
+
[
|
|
18481
|
+
/\//g,
|
|
18482
|
+
() => "\\/"
|
|
18483
|
+
],
|
|
18484
|
+
[
|
|
18485
|
+
/^\^*\\\*\\\*\\\//,
|
|
18486
|
+
() => "^(?:.*\\/)?"
|
|
18487
|
+
],
|
|
18488
|
+
[
|
|
18489
|
+
/^(?=[^^])/,
|
|
18490
|
+
function startingReplacer() {
|
|
18491
|
+
return !/\/(?!$)/.test(this) ? "(?:^|\\/)" : "^";
|
|
18492
|
+
}
|
|
18493
|
+
],
|
|
18494
|
+
[
|
|
18495
|
+
/\\\/\\\*\\\*(?=\\\/|$)/g,
|
|
18496
|
+
(_3, index, str) => index + 6 < str.length ? "(?:\\/[^\\/]+)*" : "\\/.+"
|
|
18497
|
+
],
|
|
18498
|
+
[
|
|
18499
|
+
/(^|[^\\]+)(\\\*)+(?=.+)/g,
|
|
18500
|
+
(_3, p1, p2) => {
|
|
18501
|
+
const unescaped = p2.replace(/\\\*/g, "[^\\/]*");
|
|
18502
|
+
return p1 + unescaped;
|
|
18503
|
+
}
|
|
18504
|
+
],
|
|
18505
|
+
[
|
|
18506
|
+
/\\\\\\(?=[$.|*+(){^])/g,
|
|
18507
|
+
() => ESCAPE
|
|
18508
|
+
],
|
|
18509
|
+
[
|
|
18510
|
+
/\\\\/g,
|
|
18511
|
+
() => ESCAPE
|
|
18512
|
+
],
|
|
18513
|
+
[
|
|
18514
|
+
/(\\)?\[([^\]/]*?)(\\*)($|\])/g,
|
|
18515
|
+
(match, leadEscape, range2, endEscape, close) => leadEscape === ESCAPE ? `\\[${range2}${cleanRangeBackSlash(endEscape)}${close}` : close === "]" ? endEscape.length % 2 === 0 ? `[${sanitizeRange(range2)}${endEscape}]` : "[]" : "[]"
|
|
18516
|
+
],
|
|
18517
|
+
[
|
|
18518
|
+
/(?:[^*])$/,
|
|
18519
|
+
(match) => /\/$/.test(match) ? `${match}$` : `${match}(?=$|\\/$)`
|
|
18520
|
+
]
|
|
18521
|
+
];
|
|
18522
|
+
var REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\/)?\\\*$/;
|
|
18523
|
+
var MODE_IGNORE = "regex";
|
|
18524
|
+
var MODE_CHECK_IGNORE = "checkRegex";
|
|
18525
|
+
var UNDERSCORE = "_";
|
|
18526
|
+
var TRAILING_WILD_CARD_REPLACERS = {
|
|
18527
|
+
[MODE_IGNORE](_3, p1) {
|
|
18528
|
+
const prefix = p1 ? `${p1}[^/]+` : "[^/]*";
|
|
18529
|
+
return `${prefix}(?=$|\\/$)`;
|
|
18530
|
+
},
|
|
18531
|
+
[MODE_CHECK_IGNORE](_3, p1) {
|
|
18532
|
+
const prefix = p1 ? `${p1}[^/]*` : "[^/]*";
|
|
18533
|
+
return `${prefix}(?=$|\\/$)`;
|
|
18534
|
+
}
|
|
18535
|
+
};
|
|
18536
|
+
var makeRegexPrefix = (pattern) => REPLACERS.reduce((prev, [matcher, replacer]) => prev.replace(matcher, replacer.bind(pattern)), pattern);
|
|
18537
|
+
var isString = (subject) => typeof subject === "string";
|
|
18538
|
+
var checkPattern = (pattern) => pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern) && pattern.indexOf("#") !== 0;
|
|
18539
|
+
var splitPattern = (pattern) => pattern.split(REGEX_SPLITALL_CRLF).filter(Boolean);
|
|
18540
|
+
|
|
18541
|
+
class IgnoreRule {
|
|
18542
|
+
constructor(pattern, mark2, body4, ignoreCase, negative, prefix) {
|
|
18543
|
+
this.pattern = pattern;
|
|
18544
|
+
this.mark = mark2;
|
|
18545
|
+
this.negative = negative;
|
|
18546
|
+
define(this, "body", body4);
|
|
18547
|
+
define(this, "ignoreCase", ignoreCase);
|
|
18548
|
+
define(this, "regexPrefix", prefix);
|
|
18549
|
+
}
|
|
18550
|
+
get regex() {
|
|
18551
|
+
const key2 = UNDERSCORE + MODE_IGNORE;
|
|
18552
|
+
if (this[key2]) {
|
|
18553
|
+
return this[key2];
|
|
18554
|
+
}
|
|
18555
|
+
return this._make(MODE_IGNORE, key2);
|
|
18556
|
+
}
|
|
18557
|
+
get checkRegex() {
|
|
18558
|
+
const key2 = UNDERSCORE + MODE_CHECK_IGNORE;
|
|
18559
|
+
if (this[key2]) {
|
|
18560
|
+
return this[key2];
|
|
18561
|
+
}
|
|
18562
|
+
return this._make(MODE_CHECK_IGNORE, key2);
|
|
18563
|
+
}
|
|
18564
|
+
_make(mode, key2) {
|
|
18565
|
+
const str = this.regexPrefix.replace(REGEX_REPLACE_TRAILING_WILDCARD, TRAILING_WILD_CARD_REPLACERS[mode]);
|
|
18566
|
+
const regex = this.ignoreCase ? new RegExp(str, "i") : new RegExp(str);
|
|
18567
|
+
return define(this, key2, regex);
|
|
18568
|
+
}
|
|
18569
|
+
}
|
|
18570
|
+
var createRule = ({
|
|
18571
|
+
pattern,
|
|
18572
|
+
mark: mark2
|
|
18573
|
+
}, ignoreCase) => {
|
|
18574
|
+
let negative = false;
|
|
18575
|
+
let body4 = pattern;
|
|
18576
|
+
if (body4.indexOf("!") === 0) {
|
|
18577
|
+
negative = true;
|
|
18578
|
+
body4 = body4.substr(1);
|
|
18579
|
+
}
|
|
18580
|
+
body4 = body4.replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, "!").replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, "#");
|
|
18581
|
+
const regexPrefix = makeRegexPrefix(body4);
|
|
18582
|
+
return new IgnoreRule(pattern, mark2, body4, ignoreCase, negative, regexPrefix);
|
|
18583
|
+
};
|
|
18584
|
+
|
|
18585
|
+
class RuleManager {
|
|
18586
|
+
constructor(ignoreCase) {
|
|
18587
|
+
this._ignoreCase = ignoreCase;
|
|
18588
|
+
this._rules = [];
|
|
18589
|
+
}
|
|
18590
|
+
_add(pattern) {
|
|
18591
|
+
if (pattern && pattern[KEY_IGNORE]) {
|
|
18592
|
+
this._rules = this._rules.concat(pattern._rules._rules);
|
|
18593
|
+
this._added = true;
|
|
18594
|
+
return;
|
|
18595
|
+
}
|
|
18596
|
+
if (isString(pattern)) {
|
|
18597
|
+
pattern = {
|
|
18598
|
+
pattern
|
|
18599
|
+
};
|
|
18600
|
+
}
|
|
18601
|
+
if (checkPattern(pattern.pattern)) {
|
|
18602
|
+
const rule = createRule(pattern, this._ignoreCase);
|
|
18603
|
+
this._added = true;
|
|
18604
|
+
this._rules.push(rule);
|
|
18605
|
+
}
|
|
18606
|
+
}
|
|
18607
|
+
add(pattern) {
|
|
18608
|
+
this._added = false;
|
|
18609
|
+
makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._add, this);
|
|
18610
|
+
return this._added;
|
|
18611
|
+
}
|
|
18612
|
+
test(path, checkUnignored, mode) {
|
|
18613
|
+
let ignored = false;
|
|
18614
|
+
let unignored = false;
|
|
18615
|
+
let matchedRule;
|
|
18616
|
+
this._rules.forEach((rule) => {
|
|
18617
|
+
const { negative } = rule;
|
|
18618
|
+
if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) {
|
|
18619
|
+
return;
|
|
18620
|
+
}
|
|
18621
|
+
const matched = rule[mode].test(path);
|
|
18622
|
+
if (!matched) {
|
|
18623
|
+
return;
|
|
18624
|
+
}
|
|
18625
|
+
ignored = !negative;
|
|
18626
|
+
unignored = negative;
|
|
18627
|
+
matchedRule = negative ? UNDEFINED : rule;
|
|
18628
|
+
});
|
|
18629
|
+
const ret = {
|
|
18630
|
+
ignored,
|
|
18631
|
+
unignored
|
|
18632
|
+
};
|
|
18633
|
+
if (matchedRule) {
|
|
18634
|
+
ret.rule = matchedRule;
|
|
18635
|
+
}
|
|
18636
|
+
return ret;
|
|
18637
|
+
}
|
|
18638
|
+
}
|
|
18639
|
+
var throwError = (message, Ctor) => {
|
|
18640
|
+
throw new Ctor(message);
|
|
18641
|
+
};
|
|
18642
|
+
var checkPath = (path, originalPath, doThrow) => {
|
|
18643
|
+
if (!isString(path)) {
|
|
18644
|
+
return doThrow(`path must be a string, but got \`${originalPath}\``, TypeError);
|
|
18645
|
+
}
|
|
18646
|
+
if (!path) {
|
|
18647
|
+
return doThrow(`path must not be empty`, TypeError);
|
|
18648
|
+
}
|
|
18649
|
+
if (checkPath.isNotRelative(path)) {
|
|
18650
|
+
const r4 = "`path.relative()`d";
|
|
18651
|
+
return doThrow(`path should be a ${r4} string, but got "${originalPath}"`, RangeError);
|
|
18652
|
+
}
|
|
18653
|
+
return true;
|
|
18654
|
+
};
|
|
18655
|
+
var isNotRelative = (path) => REGEX_TEST_INVALID_PATH.test(path);
|
|
18656
|
+
checkPath.isNotRelative = isNotRelative;
|
|
18657
|
+
checkPath.convert = (p2) => p2;
|
|
18658
|
+
|
|
18659
|
+
class Ignore {
|
|
18660
|
+
constructor({
|
|
18661
|
+
ignorecase = true,
|
|
18662
|
+
ignoreCase = ignorecase,
|
|
18663
|
+
allowRelativePaths = false
|
|
18664
|
+
} = {}) {
|
|
18665
|
+
define(this, KEY_IGNORE, true);
|
|
18666
|
+
this._rules = new RuleManager(ignoreCase);
|
|
18667
|
+
this._strictPathCheck = !allowRelativePaths;
|
|
18668
|
+
this._initCache();
|
|
18669
|
+
}
|
|
18670
|
+
_initCache() {
|
|
18671
|
+
this._ignoreCache = Object.create(null);
|
|
18672
|
+
this._testCache = Object.create(null);
|
|
18673
|
+
}
|
|
18674
|
+
add(pattern) {
|
|
18675
|
+
if (this._rules.add(pattern)) {
|
|
18676
|
+
this._initCache();
|
|
18677
|
+
}
|
|
18678
|
+
return this;
|
|
18679
|
+
}
|
|
18680
|
+
addPattern(pattern) {
|
|
18681
|
+
return this.add(pattern);
|
|
18682
|
+
}
|
|
18683
|
+
_test(originalPath, cache, checkUnignored, slices) {
|
|
18684
|
+
const path = originalPath && checkPath.convert(originalPath);
|
|
18685
|
+
checkPath(path, originalPath, this._strictPathCheck ? throwError : RETURN_FALSE);
|
|
18686
|
+
return this._t(path, cache, checkUnignored, slices);
|
|
18687
|
+
}
|
|
18688
|
+
checkIgnore(path) {
|
|
18689
|
+
if (!REGEX_TEST_TRAILING_SLASH.test(path)) {
|
|
18690
|
+
return this.test(path);
|
|
18691
|
+
}
|
|
18692
|
+
const slices = path.split(SLASH).filter(Boolean);
|
|
18693
|
+
slices.pop();
|
|
18694
|
+
if (slices.length) {
|
|
18695
|
+
const parent = this._t(slices.join(SLASH) + SLASH, this._testCache, true, slices);
|
|
18696
|
+
if (parent.ignored) {
|
|
18697
|
+
return parent;
|
|
18698
|
+
}
|
|
18699
|
+
}
|
|
18700
|
+
return this._rules.test(path, false, MODE_CHECK_IGNORE);
|
|
18701
|
+
}
|
|
18702
|
+
_t(path, cache, checkUnignored, slices) {
|
|
18703
|
+
if (path in cache) {
|
|
18704
|
+
return cache[path];
|
|
18705
|
+
}
|
|
18706
|
+
if (!slices) {
|
|
18707
|
+
slices = path.split(SLASH).filter(Boolean);
|
|
18708
|
+
}
|
|
18709
|
+
slices.pop();
|
|
18710
|
+
if (!slices.length) {
|
|
18711
|
+
return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE);
|
|
18712
|
+
}
|
|
18713
|
+
const parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices);
|
|
18714
|
+
return cache[path] = parent.ignored ? parent : this._rules.test(path, checkUnignored, MODE_IGNORE);
|
|
18715
|
+
}
|
|
18716
|
+
ignores(path) {
|
|
18717
|
+
return this._test(path, this._ignoreCache, false).ignored;
|
|
18718
|
+
}
|
|
18719
|
+
createFilter() {
|
|
18720
|
+
return (path) => !this.ignores(path);
|
|
18721
|
+
}
|
|
18722
|
+
filter(paths) {
|
|
18723
|
+
return makeArray(paths).filter(this.createFilter());
|
|
18724
|
+
}
|
|
18725
|
+
test(path) {
|
|
18726
|
+
return this._test(path, this._testCache, true);
|
|
18727
|
+
}
|
|
18728
|
+
}
|
|
18729
|
+
var factory = (options) => new Ignore(options);
|
|
18730
|
+
var isPathValid = (path) => checkPath(path && checkPath.convert(path), path, RETURN_FALSE);
|
|
18731
|
+
var setupWindows = () => {
|
|
18732
|
+
const makePosix = (str) => /^\\\\\?\\/.test(str) || /["<>|\u0000-\u001F]+/u.test(str) ? str : str.replace(/\\/g, "/");
|
|
18733
|
+
checkPath.convert = makePosix;
|
|
18734
|
+
const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i;
|
|
18735
|
+
checkPath.isNotRelative = (path) => REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path);
|
|
18736
|
+
};
|
|
18737
|
+
if (typeof process !== "undefined" && process.platform === "win32") {
|
|
18738
|
+
setupWindows();
|
|
18739
|
+
}
|
|
18740
|
+
module2.exports = factory;
|
|
18741
|
+
factory.default = factory;
|
|
18742
|
+
module2.exports.isPathValid = isPathValid;
|
|
18743
|
+
define(module2.exports, Symbol.for("setupWindows"), setupWindows);
|
|
18744
|
+
});
|
|
18745
|
+
|
|
18746
|
+
// src/core/intelligence/ignore.ts
|
|
18747
|
+
function parseIgnore(text2) {
|
|
18748
|
+
const out2 = [];
|
|
18749
|
+
for (const line of text2.split(`
|
|
18750
|
+
`)) {
|
|
18751
|
+
const s2 = line.trim();
|
|
18752
|
+
if (s2 === "" || s2.startsWith("#"))
|
|
18753
|
+
continue;
|
|
18754
|
+
out2.push(s2);
|
|
18755
|
+
}
|
|
18756
|
+
return out2;
|
|
18757
|
+
}
|
|
18758
|
+
|
|
18759
|
+
class IgnoreMatcher {
|
|
18760
|
+
ig = import_ignore.default();
|
|
18761
|
+
size;
|
|
18762
|
+
constructor(patterns) {
|
|
18763
|
+
if (patterns.length > 0)
|
|
18764
|
+
this.ig.add(patterns);
|
|
18765
|
+
this.size = patterns.length;
|
|
18766
|
+
}
|
|
18767
|
+
ignores(relPath, isDir) {
|
|
18768
|
+
if (this.size === 0)
|
|
18769
|
+
return false;
|
|
18770
|
+
let p2 = relPath.replace(/\\/g, "/");
|
|
18771
|
+
if (p2.startsWith("/"))
|
|
18772
|
+
p2 = p2.slice(1);
|
|
18773
|
+
if (p2 === "" || p2 === ".")
|
|
18774
|
+
return false;
|
|
18775
|
+
return this.ig.ignores(isDir ? `${p2}/` : p2);
|
|
18776
|
+
}
|
|
18777
|
+
}
|
|
18778
|
+
function buildIgnoreMatcher(...texts) {
|
|
18779
|
+
const patterns = [];
|
|
18780
|
+
for (const t of texts) {
|
|
18781
|
+
if (t)
|
|
18782
|
+
patterns.push(...parseIgnore(t));
|
|
18783
|
+
}
|
|
18784
|
+
return new IgnoreMatcher(patterns);
|
|
18785
|
+
}
|
|
18786
|
+
var import_ignore;
|
|
18787
|
+
var init_ignore = __esm(() => {
|
|
18788
|
+
import_ignore = __toESM(require_ignore(), 1);
|
|
18789
|
+
});
|
|
18790
|
+
|
|
18419
18791
|
// src/core/intelligence/types.ts
|
|
18420
18792
|
function detectLanguageFromPath(file) {
|
|
18421
18793
|
const slash = file.lastIndexOf("/");
|
|
@@ -18562,9 +18934,9 @@ var init_types2 = __esm(() => {
|
|
|
18562
18934
|
});
|
|
18563
18935
|
|
|
18564
18936
|
// src/core/intelligence/repo-map-utils.ts
|
|
18565
|
-
import { readdir, stat } from "fs/promises";
|
|
18937
|
+
import { readdir, readFile, stat } from "fs/promises";
|
|
18566
18938
|
import { homedir as homedir3 } from "os";
|
|
18567
|
-
import { join as join5, resolve as resolve2 } from "path";
|
|
18939
|
+
import { join as join5, relative, resolve as resolve2 } from "path";
|
|
18568
18940
|
function isIndexablePath(file) {
|
|
18569
18941
|
return detectLanguageFromPath(file) !== "unknown" || isBareIndexable(file);
|
|
18570
18942
|
}
|
|
@@ -18759,9 +19131,10 @@ async function collectFiles(dir, depth = 0) {
|
|
|
18759
19131
|
warning: "Opened in home directory or system root \u2014 no files indexed. Open a project directory instead."
|
|
18760
19132
|
};
|
|
18761
19133
|
}
|
|
19134
|
+
const ignore = buildIgnoreMatcher(await readIgnoreFile(join5(dir, ".gitignore")), await readIgnoreFile(join5(dir, ".soulforgeignore")));
|
|
18762
19135
|
const collected = [];
|
|
18763
19136
|
let hitCap = false;
|
|
18764
|
-
const walkDone = collectFilesWalk(dir, depth, undefined, collected).then(() => {
|
|
19137
|
+
const walkDone = collectFilesWalk(dir, depth, undefined, collected, dir, ignore).then(() => {
|
|
18765
19138
|
hitCap = collected.length >= WALK_FILE_CAP;
|
|
18766
19139
|
});
|
|
18767
19140
|
const timedOut = await Promise.race([walkDone.then(() => false), new Promise((r4) => setTimeout(() => r4(true), 60000))]);
|
|
@@ -18802,7 +19175,8 @@ async function collectFilesViaGit(dir) {
|
|
|
18802
19175
|
if (s2.size < MAX_FILE_SIZE)
|
|
18803
19176
|
files.push({
|
|
18804
19177
|
path: fullPath,
|
|
18805
|
-
mtimeMs: s2.mtimeMs
|
|
19178
|
+
mtimeMs: s2.mtimeMs,
|
|
19179
|
+
size: s2.size
|
|
18806
19180
|
});
|
|
18807
19181
|
} catch {}
|
|
18808
19182
|
if (files.length % 50 === 0)
|
|
@@ -18813,7 +19187,14 @@ async function collectFilesViaGit(dir) {
|
|
|
18813
19187
|
return null;
|
|
18814
19188
|
}
|
|
18815
19189
|
}
|
|
18816
|
-
async function
|
|
19190
|
+
async function readIgnoreFile(path) {
|
|
19191
|
+
try {
|
|
19192
|
+
return await readFile(path, "utf-8");
|
|
19193
|
+
} catch {
|
|
19194
|
+
return null;
|
|
19195
|
+
}
|
|
19196
|
+
}
|
|
19197
|
+
async function collectFilesWalk(dir, depth, counter, out2, rootDir, ignore) {
|
|
18817
19198
|
if (depth > MAX_DEPTH)
|
|
18818
19199
|
return [];
|
|
18819
19200
|
const ctx = counter ?? {
|
|
@@ -18831,20 +19212,24 @@ async function collectFilesWalk(dir, depth, counter, out2) {
|
|
|
18831
19212
|
continue;
|
|
18832
19213
|
}
|
|
18833
19214
|
const fullPath = join5(dir, entry.name);
|
|
19215
|
+
const rel = relative(rootDir, fullPath);
|
|
18834
19216
|
if (entry.isDirectory()) {
|
|
18835
|
-
if (!IGNORED_DIRS.has(entry.name)) {
|
|
18836
|
-
await collectFilesWalk(fullPath, depth + 1, ctx, files);
|
|
19217
|
+
if (!IGNORED_DIRS.has(entry.name) && !ignore.ignores(rel, true)) {
|
|
19218
|
+
await collectFilesWalk(fullPath, depth + 1, ctx, files, rootDir, ignore);
|
|
18837
19219
|
}
|
|
18838
19220
|
} else if (entry.isFile()) {
|
|
18839
19221
|
if (isForbidden(fullPath))
|
|
18840
19222
|
continue;
|
|
19223
|
+
if (ignore.ignores(rel, false))
|
|
19224
|
+
continue;
|
|
18841
19225
|
if (isIndexablePath(entry.name)) {
|
|
18842
19226
|
try {
|
|
18843
19227
|
const s2 = await stat(fullPath);
|
|
18844
19228
|
if (s2.size < MAX_FILE_SIZE) {
|
|
18845
19229
|
files.push({
|
|
18846
19230
|
path: fullPath,
|
|
18847
|
-
mtimeMs: s2.mtimeMs
|
|
19231
|
+
mtimeMs: s2.mtimeMs,
|
|
19232
|
+
size: s2.size
|
|
18848
19233
|
});
|
|
18849
19234
|
ctx.n++;
|
|
18850
19235
|
}
|
|
@@ -18861,6 +19246,7 @@ var INDEXABLE_EXTENSIONS, NON_CODE_LANGUAGES, IMPORT_TRACKABLE_LANGUAGES, BARREL
|
|
|
18861
19246
|
var init_repo_map_utils = __esm(() => {
|
|
18862
19247
|
init_file_tree();
|
|
18863
19248
|
init_forbidden();
|
|
19249
|
+
init_ignore();
|
|
18864
19250
|
init_types2();
|
|
18865
19251
|
INDEXABLE_EXTENSIONS = EXT_TO_LANGUAGE;
|
|
18866
19252
|
NON_CODE_LANGUAGES = new Set(["unknown", "css", "html", "json", "jsonnet", "toml", "yaml", "xml", "markdown", "mdx", "sql", "graphql", "proto", "properties", "ini", "env", "dockerfile", "makefile", "nix", "hcl", "bazel", "just", "svg", "csv", "ignore", "lockfile"]);
|
|
@@ -18881,6 +19267,64 @@ var init_repo_map_utils = __esm(() => {
|
|
|
18881
19267
|
WINDOWS_DRIVE_ROOT_RE = /^[A-Za-z]:\\?$/;
|
|
18882
19268
|
});
|
|
18883
19269
|
|
|
19270
|
+
// src/core/intelligence/trigram.ts
|
|
19271
|
+
function pack(a2, b3, c) {
|
|
19272
|
+
return a2 << 16 | b3 << 8 | c;
|
|
19273
|
+
}
|
|
19274
|
+
function lower(byte) {
|
|
19275
|
+
return byte >= 65 && byte <= 90 ? byte + 32 : byte;
|
|
19276
|
+
}
|
|
19277
|
+
function extractContentTrigrams(content) {
|
|
19278
|
+
const out2 = new Set;
|
|
19279
|
+
const len = content.length;
|
|
19280
|
+
if (len < MIN_TRIGRAM_LEN)
|
|
19281
|
+
return out2;
|
|
19282
|
+
for (let i4 = 0;i4 + 2 < len; i4++) {
|
|
19283
|
+
const a2 = lower(content.charCodeAt(i4));
|
|
19284
|
+
const b3 = lower(content.charCodeAt(i4 + 1));
|
|
19285
|
+
const c = lower(content.charCodeAt(i4 + 2));
|
|
19286
|
+
if (isWs(a2) && isWs(b3) && isWs(c))
|
|
19287
|
+
continue;
|
|
19288
|
+
if (a2 > 255 || b3 > 255 || c > 255)
|
|
19289
|
+
continue;
|
|
19290
|
+
out2.add(pack(a2, b3, c));
|
|
19291
|
+
}
|
|
19292
|
+
return out2;
|
|
19293
|
+
}
|
|
19294
|
+
function isWs(byte) {
|
|
19295
|
+
return byte === 32 || byte === 9 || byte === 10 || byte === 13;
|
|
19296
|
+
}
|
|
19297
|
+
function extractPatternTrigrams(pattern) {
|
|
19298
|
+
const literal = longestLiteralRun(pattern);
|
|
19299
|
+
if (literal.length < MIN_TRIGRAM_LEN)
|
|
19300
|
+
return null;
|
|
19301
|
+
const set = extractContentTrigrams(literal);
|
|
19302
|
+
if (set.size === 0)
|
|
19303
|
+
return null;
|
|
19304
|
+
return [...set];
|
|
19305
|
+
}
|
|
19306
|
+
function longestLiteralRun(pattern) {
|
|
19307
|
+
let best = "";
|
|
19308
|
+
let cur = "";
|
|
19309
|
+
for (const ch of pattern) {
|
|
19310
|
+
if (META.has(ch) || ch === " " || ch === "\t" || ch === `
|
|
19311
|
+
`) {
|
|
19312
|
+
if (cur.length > best.length)
|
|
19313
|
+
best = cur;
|
|
19314
|
+
cur = "";
|
|
19315
|
+
} else {
|
|
19316
|
+
cur += ch;
|
|
19317
|
+
}
|
|
19318
|
+
}
|
|
19319
|
+
if (cur.length > best.length)
|
|
19320
|
+
best = cur;
|
|
19321
|
+
return best;
|
|
19322
|
+
}
|
|
19323
|
+
var MAX_POSTINGS_PER_TRIGRAM = 512, MIN_TRIGRAM_LEN = 3, META;
|
|
19324
|
+
var init_trigram = __esm(() => {
|
|
19325
|
+
META = new Set([".", "*", "+", "?", "(", ")", "[", "]", "{", "}", "|", "^", "$", "\\"]);
|
|
19326
|
+
});
|
|
19327
|
+
|
|
18884
19328
|
// node_modules/web-tree-sitter/tree-sitter.js
|
|
18885
19329
|
var exports_tree_sitter = {};
|
|
18886
19330
|
__export(exports_tree_sitter, {
|
|
@@ -22105,7 +22549,7 @@ __export(exports_tree_sitter2, {
|
|
|
22105
22549
|
TreeSitterBackend: () => TreeSitterBackend
|
|
22106
22550
|
});
|
|
22107
22551
|
import { existsSync as existsSync4 } from "fs";
|
|
22108
|
-
import { readFile } from "fs/promises";
|
|
22552
|
+
import { readFile as readFile2 } from "fs/promises";
|
|
22109
22553
|
import { dirname, join as join6, resolve as resolve3 } from "path";
|
|
22110
22554
|
function extractImportSpecifiers(node, language) {
|
|
22111
22555
|
const specifiers = [];
|
|
@@ -23377,7 +23821,7 @@ var init_tree_sitter2 = __esm(() => {
|
|
|
23377
23821
|
return this.cache.get(absPath);
|
|
23378
23822
|
}
|
|
23379
23823
|
try {
|
|
23380
|
-
return await
|
|
23824
|
+
return await readFile2(absPath, "utf-8");
|
|
23381
23825
|
} catch {
|
|
23382
23826
|
return null;
|
|
23383
23827
|
}
|
|
@@ -24003,7 +24447,7 @@ __export(exports_repo_map, {
|
|
|
24003
24447
|
import { Database } from "bun:sqlite";
|
|
24004
24448
|
import { chmodSync, existsSync as existsSync5, readdirSync as readdirSync2, readFileSync as readFileSync3, statSync } from "fs";
|
|
24005
24449
|
import { stat as statAsync } from "fs/promises";
|
|
24006
|
-
import { dirname as dirname2, extname, join as join7, relative, resolve as resolve4 } from "path";
|
|
24450
|
+
import { dirname as dirname2, extname, join as join7, relative as relative2, resolve as resolve4 } from "path";
|
|
24007
24451
|
|
|
24008
24452
|
class RepoMap {
|
|
24009
24453
|
static testFileMatch(alias = "f") {
|
|
@@ -24194,6 +24638,21 @@ class RepoMap {
|
|
|
24194
24638
|
CREATE INDEX IF NOT EXISTS idx_calls_callee ON calls(callee_symbol_id);
|
|
24195
24639
|
CREATE INDEX IF NOT EXISTS idx_calls_callee_file ON calls(callee_file_id);
|
|
24196
24640
|
`);
|
|
24641
|
+
this.db.run(`
|
|
24642
|
+
CREATE TABLE IF NOT EXISTS trigrams (
|
|
24643
|
+
trigram INTEGER NOT NULL,
|
|
24644
|
+
file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE,
|
|
24645
|
+
PRIMARY KEY (trigram, file_id)
|
|
24646
|
+
) WITHOUT ROWID;
|
|
24647
|
+
`);
|
|
24648
|
+
this.db.run("CREATE INDEX IF NOT EXISTS idx_trigrams_file ON trigrams(file_id)");
|
|
24649
|
+
try {
|
|
24650
|
+
this.db.run("ALTER TABLE files ADD COLUMN size_bytes INTEGER NOT NULL DEFAULT 0");
|
|
24651
|
+
} catch {}
|
|
24652
|
+
try {
|
|
24653
|
+
this.db.run("ALTER TABLE symbols ADD COLUMN moniker TEXT");
|
|
24654
|
+
} catch {}
|
|
24655
|
+
this.db.run("CREATE INDEX IF NOT EXISTS idx_symbols_moniker ON symbols(moniker)");
|
|
24197
24656
|
this.migrateSemanticSource();
|
|
24198
24657
|
this.migrateSemanticNoCascade();
|
|
24199
24658
|
this.backfillSummaryPaths();
|
|
@@ -24323,26 +24782,28 @@ class RepoMap {
|
|
|
24323
24782
|
files = allFiles;
|
|
24324
24783
|
}
|
|
24325
24784
|
const existingFiles = new Map;
|
|
24326
|
-
for (const row of this.db.query("SELECT id, path, mtime_ms FROM files").all()) {
|
|
24785
|
+
for (const row of this.db.query("SELECT id, path, mtime_ms, size_bytes FROM files").all()) {
|
|
24327
24786
|
existingFiles.set(row.path, {
|
|
24328
24787
|
id: row.id,
|
|
24329
|
-
mtime_ms: row.mtime_ms
|
|
24788
|
+
mtime_ms: row.mtime_ms,
|
|
24789
|
+
size_bytes: row.size_bytes
|
|
24330
24790
|
});
|
|
24331
24791
|
}
|
|
24332
24792
|
const currentPaths = new Set;
|
|
24333
24793
|
const toIndex = [];
|
|
24334
24794
|
for (const file of files) {
|
|
24335
|
-
const relPath =
|
|
24795
|
+
const relPath = relative2(this.cwd, file.path);
|
|
24336
24796
|
currentPaths.add(relPath);
|
|
24337
24797
|
const existing = existingFiles.get(relPath);
|
|
24338
|
-
if (existing && existing.mtime_ms === file.mtimeMs)
|
|
24798
|
+
if (existing && existing.mtime_ms === file.mtimeMs && existing.size_bytes === file.size)
|
|
24339
24799
|
continue;
|
|
24340
24800
|
const language = detectLanguageFromPath(file.path);
|
|
24341
24801
|
toIndex.push({
|
|
24342
24802
|
absPath: file.path,
|
|
24343
24803
|
relPath,
|
|
24344
24804
|
mtime: file.mtimeMs,
|
|
24345
|
-
language
|
|
24805
|
+
language,
|
|
24806
|
+
size: file.size
|
|
24346
24807
|
});
|
|
24347
24808
|
}
|
|
24348
24809
|
const stale = [...existingFiles.keys()].filter((p2) => !currentPaths.has(p2));
|
|
@@ -24364,7 +24825,7 @@ class RepoMap {
|
|
|
24364
24825
|
const file = toIndex[i4];
|
|
24365
24826
|
if (file) {
|
|
24366
24827
|
try {
|
|
24367
|
-
await this.indexFile(file.absPath, file.relPath, file.mtime, file.language);
|
|
24828
|
+
await this.indexFile(file.absPath, file.relPath, file.mtime, file.language, file.size);
|
|
24368
24829
|
} catch (err2) {
|
|
24369
24830
|
this.indexErrors++;
|
|
24370
24831
|
if (this.indexErrors <= 5) {
|
|
@@ -24442,17 +24903,16 @@ class RepoMap {
|
|
|
24442
24903
|
}
|
|
24443
24904
|
} catch {}
|
|
24444
24905
|
}
|
|
24445
|
-
const
|
|
24446
|
-
|
|
24447
|
-
|
|
24448
|
-
|
|
24449
|
-
|
|
24450
|
-
const
|
|
24451
|
-
const bGit = b3.gitRank !== undefined;
|
|
24906
|
+
const rankFor = (f2) => gitRecency.get(relative2(this.cwd, f2.path));
|
|
24907
|
+
const sorted = [...files].sort((a2, b3) => {
|
|
24908
|
+
const ra = rankFor(a2);
|
|
24909
|
+
const rb = rankFor(b3);
|
|
24910
|
+
const aGit = ra !== undefined;
|
|
24911
|
+
const bGit = rb !== undefined;
|
|
24452
24912
|
if (aGit !== bGit)
|
|
24453
24913
|
return aGit ? -1 : 1;
|
|
24454
24914
|
if (aGit && bGit)
|
|
24455
|
-
return
|
|
24915
|
+
return ra - rb;
|
|
24456
24916
|
return b3.mtimeMs - a2.mtimeMs;
|
|
24457
24917
|
});
|
|
24458
24918
|
return sorted.slice(0, this.maxFiles);
|
|
@@ -24471,7 +24931,7 @@ class RepoMap {
|
|
|
24471
24931
|
this.onError?.(`Tree-sitter init failed: ${err2 instanceof Error ? err2.message : String(err2)} \u2014 indexing without AST symbols`);
|
|
24472
24932
|
}
|
|
24473
24933
|
}
|
|
24474
|
-
async indexFile(absPath, relPath, mtime, language) {
|
|
24934
|
+
async indexFile(absPath, relPath, mtime, language, size = 0) {
|
|
24475
24935
|
const existing = this.db.query("SELECT id FROM files WHERE path = ?").get(relPath);
|
|
24476
24936
|
if (existing) {
|
|
24477
24937
|
this.db.transaction(() => {
|
|
@@ -24483,6 +24943,7 @@ class RepoMap {
|
|
|
24483
24943
|
this.db.query("DELETE FROM shape_hashes WHERE file_id = ?").run(existing.id);
|
|
24484
24944
|
this.db.query("DELETE FROM token_signatures WHERE file_id = ?").run(existing.id);
|
|
24485
24945
|
this.db.query("DELETE FROM token_fragments WHERE file_id = ?").run(existing.id);
|
|
24946
|
+
this.db.query("DELETE FROM trigrams WHERE file_id = ?").run(existing.id);
|
|
24486
24947
|
this.db.query("DELETE FROM edges WHERE source_file_id = ? OR target_file_id = ?").run(existing.id, existing.id);
|
|
24487
24948
|
})();
|
|
24488
24949
|
}
|
|
@@ -24510,9 +24971,9 @@ class RepoMap {
|
|
|
24510
24971
|
}
|
|
24511
24972
|
const symbolCount = outline?.symbols.length ?? 0;
|
|
24512
24973
|
if (existing) {
|
|
24513
|
-
this.db.query("UPDATE files SET mtime_ms = ?, language = ?, line_count = ?, symbol_count = ? WHERE id = ?").run(mtime, language, lineCount, symbolCount, existing.id);
|
|
24974
|
+
this.db.query("UPDATE files SET mtime_ms = ?, language = ?, line_count = ?, symbol_count = ?, size_bytes = ? WHERE id = ?").run(mtime, language, lineCount, symbolCount, size, existing.id);
|
|
24514
24975
|
} else {
|
|
24515
|
-
this.db.query("INSERT INTO files (path, mtime_ms, language, line_count, symbol_count) VALUES (?, ?, ?, ?, ?)").run(relPath, mtime, language, lineCount, symbolCount);
|
|
24976
|
+
this.db.query("INSERT INTO files (path, mtime_ms, language, line_count, symbol_count, size_bytes) VALUES (?, ?, ?, ?, ?, ?)").run(relPath, mtime, language, lineCount, symbolCount, size);
|
|
24516
24977
|
}
|
|
24517
24978
|
const fileId = existing?.id ?? this.db.query("SELECT id FROM files WHERE path = ?").get(relPath)?.id;
|
|
24518
24979
|
if (outline) {
|
|
@@ -24566,6 +25027,18 @@ class RepoMap {
|
|
|
24566
25027
|
});
|
|
24567
25028
|
qTx();
|
|
24568
25029
|
}
|
|
25030
|
+
{
|
|
25031
|
+
const mod = relPath.replace(/\.[^./]+$/, "");
|
|
25032
|
+
const rows = this.db.query("SELECT id, name, kind, qualified_name FROM symbols WHERE file_id = ?").all(fileId);
|
|
25033
|
+
const updateMoniker = this.db.prepare("UPDATE symbols SET moniker = ? WHERE id = ?");
|
|
25034
|
+
const mTx = this.db.transaction(() => {
|
|
25035
|
+
for (const r4 of rows) {
|
|
25036
|
+
const descriptor = r4.qualified_name ?? r4.name;
|
|
25037
|
+
updateMoniker.run(`${mod}#${descriptor}(${r4.kind})`, r4.id);
|
|
25038
|
+
}
|
|
25039
|
+
});
|
|
25040
|
+
mTx();
|
|
25041
|
+
}
|
|
24569
25042
|
}
|
|
24570
25043
|
{
|
|
24571
25044
|
const BARREL_RE2 = /\/(index\.(ts|js|tsx|mts|mjs)|__init__\.py|mod\.rs|lib\.rs)$/;
|
|
@@ -24659,6 +25132,9 @@ class RepoMap {
|
|
|
24659
25132
|
tx();
|
|
24660
25133
|
}
|
|
24661
25134
|
}
|
|
25135
|
+
if (content.length <= TRIGRAM_MAX_FILE_BYTES) {
|
|
25136
|
+
this.indexTrigrams(fileId, content);
|
|
25137
|
+
}
|
|
24662
25138
|
if (!NON_CODE_LANGUAGES.has(language)) {
|
|
24663
25139
|
const identifiers = this.extractIdentifiers(content, language);
|
|
24664
25140
|
for (const id of identifiers) {
|
|
@@ -24823,7 +25299,7 @@ class RepoMap {
|
|
|
24823
25299
|
}
|
|
24824
25300
|
if (normalized) {
|
|
24825
25301
|
const base = resolve4(importerDir, normalized);
|
|
24826
|
-
const relBase =
|
|
25302
|
+
const relBase = relative2(this.cwd, base);
|
|
24827
25303
|
if (relBase.startsWith(".."))
|
|
24828
25304
|
return null;
|
|
24829
25305
|
return this.resolveRelPath(relBase);
|
|
@@ -24871,7 +25347,7 @@ class RepoMap {
|
|
|
24871
25347
|
candidates.push(`${base}.go`);
|
|
24872
25348
|
}
|
|
24873
25349
|
for (const candidate of candidates) {
|
|
24874
|
-
const relPath =
|
|
25350
|
+
const relPath = relative2(this.cwd, candidate);
|
|
24875
25351
|
if (relPath.startsWith(".."))
|
|
24876
25352
|
continue;
|
|
24877
25353
|
const row = this.db.query("SELECT id FROM files WHERE path = ?").get(relPath);
|
|
@@ -26034,7 +26510,7 @@ class RepoMap {
|
|
|
26034
26510
|
return result;
|
|
26035
26511
|
}
|
|
26036
26512
|
onFileChanged(absPath) {
|
|
26037
|
-
const relPath =
|
|
26513
|
+
const relPath = relative2(this.cwd, absPath);
|
|
26038
26514
|
if (relPath === "package.json" || relPath === "Cargo.toml" || relPath === "go.mod") {
|
|
26039
26515
|
this.entryPointsCache = null;
|
|
26040
26516
|
}
|
|
@@ -26064,7 +26540,7 @@ class RepoMap {
|
|
|
26064
26540
|
}] of batch) {
|
|
26065
26541
|
try {
|
|
26066
26542
|
const st = await statAsync(absPath);
|
|
26067
|
-
this.indexFile(absPath, relPath, st.mtimeMs, language);
|
|
26543
|
+
this.indexFile(absPath, relPath, st.mtimeMs, language, st.size);
|
|
26068
26544
|
} catch (e) {
|
|
26069
26545
|
this.onError?.(`reindex failed for ${relPath}: ${e instanceof Error ? e.message : String(e)}`);
|
|
26070
26546
|
}
|
|
@@ -26086,12 +26562,12 @@ class RepoMap {
|
|
|
26086
26562
|
recheckModifiedFiles() {
|
|
26087
26563
|
if (!this.ready)
|
|
26088
26564
|
return;
|
|
26089
|
-
const files = this.db.query("SELECT path, mtime_ms FROM files").all();
|
|
26565
|
+
const files = this.db.query("SELECT path, mtime_ms, size_bytes FROM files").all();
|
|
26090
26566
|
for (const f2 of files) {
|
|
26091
26567
|
const absPath = join7(this.cwd, f2.path);
|
|
26092
26568
|
try {
|
|
26093
26569
|
const st = statSync(absPath);
|
|
26094
|
-
if (st.mtimeMs !== f2.mtime_ms) {
|
|
26570
|
+
if (st.mtimeMs !== f2.mtime_ms || st.size !== f2.size_bytes) {
|
|
26095
26571
|
this.onFileChanged(absPath);
|
|
26096
26572
|
}
|
|
26097
26573
|
} catch {}
|
|
@@ -26481,9 +26957,9 @@ class RepoMap {
|
|
|
26481
26957
|
}
|
|
26482
26958
|
buildPersonalization(opts) {
|
|
26483
26959
|
const pv = new Map;
|
|
26484
|
-
const mentionedSet = new Set((opts.mentionedFiles ?? []).map((f2) =>
|
|
26485
|
-
const editedSet = new Set((opts.editedFiles ?? []).map((f2) =>
|
|
26486
|
-
const editorRel = opts.editorFile ?
|
|
26960
|
+
const mentionedSet = new Set((opts.mentionedFiles ?? []).map((f2) => relative2(this.cwd, f2)));
|
|
26961
|
+
const editedSet = new Set((opts.editedFiles ?? []).map((f2) => relative2(this.cwd, f2)));
|
|
26962
|
+
const editorRel = opts.editorFile ? relative2(this.cwd, opts.editorFile) : null;
|
|
26487
26963
|
const entryPoints = new Set(this.getEntryPoints());
|
|
26488
26964
|
if (mentionedSet.size === 0 && editedSet.size === 0 && !editorRel && entryPoints.size === 0)
|
|
26489
26965
|
return pv;
|
|
@@ -26527,9 +27003,9 @@ class RepoMap {
|
|
|
26527
27003
|
}
|
|
26528
27004
|
rankFiles(opts) {
|
|
26529
27005
|
const allFiles = this.db.query("SELECT id, path, mtime_ms, language, line_count, symbol_count, pagerank, is_barrel FROM files ORDER BY pagerank DESC").all();
|
|
26530
|
-
const mentionedSet = new Set((opts.mentionedFiles ?? []).map((f2) =>
|
|
26531
|
-
const editedSet = new Set((opts.editedFiles ?? []).map((f2) =>
|
|
26532
|
-
const editorRel = opts.editorFile ?
|
|
27006
|
+
const mentionedSet = new Set((opts.mentionedFiles ?? []).map((f2) => relative2(this.cwd, f2)));
|
|
27007
|
+
const editedSet = new Set((opts.editedFiles ?? []).map((f2) => relative2(this.cwd, f2)));
|
|
27008
|
+
const editorRel = opts.editorFile ? relative2(this.cwd, opts.editorFile) : null;
|
|
26533
27009
|
const neighborFiles = new Set;
|
|
26534
27010
|
const boostFileIds = new Set;
|
|
26535
27011
|
for (const f2 of allFiles) {
|
|
@@ -26666,7 +27142,7 @@ class RepoMap {
|
|
|
26666
27142
|
};
|
|
26667
27143
|
}
|
|
26668
27144
|
getFileSymbolRanges(relPath) {
|
|
26669
|
-
return this.db.query(`SELECT s.name, s.qualified_name, s.kind, s.line, s.end_line
|
|
27145
|
+
return this.db.query(`SELECT s.name, s.qualified_name, s.kind, s.line, s.end_line, s.moniker
|
|
26670
27146
|
FROM symbols s JOIN files f ON f.id = s.file_id
|
|
26671
27147
|
WHERE f.path = ?
|
|
26672
27148
|
AND s.kind IN ('interface','type','class','function','enum','method','constant')
|
|
@@ -26677,7 +27153,8 @@ class RepoMap {
|
|
|
26677
27153
|
qualifiedName: r4.qualified_name,
|
|
26678
27154
|
kind: r4.kind,
|
|
26679
27155
|
line: r4.line,
|
|
26680
|
-
endLine: r4.end_line
|
|
27156
|
+
endLine: r4.end_line,
|
|
27157
|
+
moniker: r4.moniker
|
|
26681
27158
|
}));
|
|
26682
27159
|
}
|
|
26683
27160
|
findSymbol(name2) {
|
|
@@ -27645,17 +28122,75 @@ class RepoMap {
|
|
|
27645
28122
|
return null;
|
|
27646
28123
|
}
|
|
27647
28124
|
}
|
|
28125
|
+
getEnclosingSymbols(relPath) {
|
|
28126
|
+
return this.db.query(`SELECT s.name, s.kind, s.line, s.end_line
|
|
28127
|
+
FROM symbols s JOIN files f ON f.id = s.file_id
|
|
28128
|
+
WHERE f.path = ? AND s.end_line >= s.line
|
|
28129
|
+
ORDER BY s.line
|
|
28130
|
+
LIMIT 2000`).all(relPath).map((r4) => ({
|
|
28131
|
+
name: r4.name,
|
|
28132
|
+
kind: r4.kind,
|
|
28133
|
+
line: r4.line,
|
|
28134
|
+
endLine: r4.end_line
|
|
28135
|
+
}));
|
|
28136
|
+
}
|
|
28137
|
+
resolveMoniker(moniker) {
|
|
28138
|
+
const row = this.db.query(`SELECT s.name, s.kind, s.line, s.qualified_name, f.path
|
|
28139
|
+
FROM symbols s JOIN files f ON f.id = s.file_id
|
|
28140
|
+
WHERE s.moniker = ?
|
|
28141
|
+
LIMIT 1`).get(moniker);
|
|
28142
|
+
if (!row)
|
|
28143
|
+
return null;
|
|
28144
|
+
return {
|
|
28145
|
+
name: row.name,
|
|
28146
|
+
kind: row.kind,
|
|
28147
|
+
line: row.line,
|
|
28148
|
+
qualifiedName: row.qualified_name,
|
|
28149
|
+
path: row.path
|
|
28150
|
+
};
|
|
28151
|
+
}
|
|
28152
|
+
indexTrigrams(fileId, content) {
|
|
28153
|
+
const trigrams = extractContentTrigrams(content);
|
|
28154
|
+
if (trigrams.size === 0)
|
|
28155
|
+
return;
|
|
28156
|
+
const insert = this.db.prepare("INSERT OR IGNORE INTO trigrams (trigram, file_id) VALUES (?, ?)");
|
|
28157
|
+
const countFor = this.db.prepare("SELECT COUNT(*) AS c FROM trigrams WHERE trigram = ?");
|
|
28158
|
+
const tx = this.db.transaction(() => {
|
|
28159
|
+
for (const tri of trigrams) {
|
|
28160
|
+
const existing = countFor.get(tri)?.c ?? 0;
|
|
28161
|
+
if (existing >= MAX_POSTINGS_PER_TRIGRAM)
|
|
28162
|
+
continue;
|
|
28163
|
+
insert.run(tri, fileId);
|
|
28164
|
+
}
|
|
28165
|
+
});
|
|
28166
|
+
tx();
|
|
28167
|
+
}
|
|
28168
|
+
searchTrigramCandidates(pattern, limit = 5000) {
|
|
28169
|
+
const tris = extractPatternTrigrams(pattern);
|
|
28170
|
+
if (!tris || tris.length === 0)
|
|
28171
|
+
return null;
|
|
28172
|
+
const hasTrigrams = this.db.query("SELECT 1 AS x FROM trigrams LIMIT 1").get();
|
|
28173
|
+
if (!hasTrigrams)
|
|
28174
|
+
return null;
|
|
28175
|
+
const selects = tris.map(() => "SELECT file_id FROM trigrams WHERE trigram = ?");
|
|
28176
|
+
const sql = `SELECT f.path FROM files f WHERE f.id IN (${selects.join(" INTERSECT ")}) LIMIT ?`;
|
|
28177
|
+
const rows = this.db.query(sql).all(...tris, limit);
|
|
28178
|
+
return rows.map((r4) => r4.path);
|
|
28179
|
+
}
|
|
27648
28180
|
}
|
|
28181
|
+
var TRIGRAM_MAX_FILE_BYTES;
|
|
27649
28182
|
var init_repo_map = __esm(() => {
|
|
27650
28183
|
init_ensure_soulforge_dir();
|
|
27651
28184
|
init_clone_detection();
|
|
27652
28185
|
init_repo_map_constants();
|
|
27653
28186
|
init_repo_map_utils();
|
|
28187
|
+
init_trigram();
|
|
27654
28188
|
init_types2();
|
|
28189
|
+
TRIGRAM_MAX_FILE_BYTES = 256 * 1024;
|
|
27655
28190
|
});
|
|
27656
28191
|
|
|
27657
28192
|
// src/core/intelligence/cache.ts
|
|
27658
|
-
import { readFile as
|
|
28193
|
+
import { readFile as readFile3, stat as stat2 } from "fs/promises";
|
|
27659
28194
|
|
|
27660
28195
|
class FileCache {
|
|
27661
28196
|
entries = new Map;
|
|
@@ -27673,7 +28208,7 @@ class FileCache {
|
|
|
27673
28208
|
this.entries.set(filePath, cached);
|
|
27674
28209
|
return cached.content;
|
|
27675
28210
|
}
|
|
27676
|
-
const content = await
|
|
28211
|
+
const content = await readFile3(filePath, "utf-8");
|
|
27677
28212
|
this.set(filePath, content, mtime);
|
|
27678
28213
|
return content;
|
|
27679
28214
|
} catch {
|
|
@@ -29781,7 +30316,7 @@ var init_pid_tracker = __esm(() => {
|
|
|
29781
30316
|
|
|
29782
30317
|
// src/core/intelligence/backends/lsp/standalone-client.ts
|
|
29783
30318
|
import { spawn as spawn2 } from "child_process";
|
|
29784
|
-
import { readFile as
|
|
30319
|
+
import { readFile as readFile4 } from "fs/promises";
|
|
29785
30320
|
|
|
29786
30321
|
class StandaloneLspClient {
|
|
29787
30322
|
config;
|
|
@@ -29959,7 +30494,7 @@ class StandaloneLspClient {
|
|
|
29959
30494
|
const uri = filePathToUri(filePath);
|
|
29960
30495
|
let text2;
|
|
29961
30496
|
try {
|
|
29962
|
-
text2 = await
|
|
30497
|
+
text2 = await readFile4(filePath, "utf-8");
|
|
29963
30498
|
} catch {
|
|
29964
30499
|
return;
|
|
29965
30500
|
}
|
|
@@ -30429,7 +30964,7 @@ __export(exports_lsp, {
|
|
|
30429
30964
|
LspBackend: () => LspBackend
|
|
30430
30965
|
});
|
|
30431
30966
|
import { existsSync as existsSync10, readdirSync as readdirSync4 } from "fs";
|
|
30432
|
-
import { readdir as readdir2, readFile as
|
|
30967
|
+
import { readdir as readdir2, readFile as readFile5 } from "fs/promises";
|
|
30433
30968
|
import { dirname as dirname3, join as join12, resolve as resolve5 } from "path";
|
|
30434
30969
|
function getNvimBridge() {
|
|
30435
30970
|
if (_nvimBridge === null) {
|
|
@@ -30529,7 +31064,7 @@ class LspBackend {
|
|
|
30529
31064
|
const absFile = resolve5(file);
|
|
30530
31065
|
let content;
|
|
30531
31066
|
try {
|
|
30532
|
-
content = await
|
|
31067
|
+
content = await readFile5(absFile, "utf-8");
|
|
30533
31068
|
} catch {
|
|
30534
31069
|
return null;
|
|
30535
31070
|
}
|
|
@@ -30703,7 +31238,7 @@ class LspBackend {
|
|
|
30703
31238
|
const absFile = resolve5(file);
|
|
30704
31239
|
let content;
|
|
30705
31240
|
try {
|
|
30706
|
-
content = await
|
|
31241
|
+
content = await readFile5(absFile, "utf-8");
|
|
30707
31242
|
} catch {
|
|
30708
31243
|
return null;
|
|
30709
31244
|
}
|
|
@@ -30844,7 +31379,7 @@ class LspBackend {
|
|
|
30844
31379
|
const absFile = resolve5(file);
|
|
30845
31380
|
let content;
|
|
30846
31381
|
try {
|
|
30847
|
-
content = await
|
|
31382
|
+
content = await readFile5(absFile, "utf-8");
|
|
30848
31383
|
} catch {
|
|
30849
31384
|
return null;
|
|
30850
31385
|
}
|
|
@@ -31308,7 +31843,7 @@ class LspBackend {
|
|
|
31308
31843
|
};
|
|
31309
31844
|
}
|
|
31310
31845
|
try {
|
|
31311
|
-
const content = await
|
|
31846
|
+
const content = await readFile5(file, "utf-8");
|
|
31312
31847
|
const fileLines = content.split(`
|
|
31313
31848
|
`);
|
|
31314
31849
|
const wordPattern = new RegExp(`\\b${escapeRegex(symbol)}\\b`);
|
|
@@ -31524,7 +32059,7 @@ async function workspaceEditToRefactorResult(edit, oldName, newName) {
|
|
|
31524
32059
|
for (const [filePath, edits] of fileEdits) {
|
|
31525
32060
|
let content;
|
|
31526
32061
|
try {
|
|
31527
|
-
content = await
|
|
32062
|
+
content = await readFile5(filePath, "utf-8");
|
|
31528
32063
|
} catch {
|
|
31529
32064
|
continue;
|
|
31530
32065
|
}
|
|
@@ -39749,7 +40284,7 @@ ${lanes.join(`
|
|
|
39749
40284
|
writeOutputIsTTY() {
|
|
39750
40285
|
return process.stdout.isTTY;
|
|
39751
40286
|
},
|
|
39752
|
-
readFile:
|
|
40287
|
+
readFile: readFile6,
|
|
39753
40288
|
writeFile: writeFile2,
|
|
39754
40289
|
watchFile: watchFile2,
|
|
39755
40290
|
watchDirectory,
|
|
@@ -39942,7 +40477,7 @@ ${lanes.join(`
|
|
|
39942
40477
|
function fsWatchWorker(fileOrDirectory, recursive, callback) {
|
|
39943
40478
|
return _fs.watch(fileOrDirectory, fsSupportsRecursiveFsWatch ? { persistent: true, recursive: !!recursive } : { persistent: true }, callback);
|
|
39944
40479
|
}
|
|
39945
|
-
function
|
|
40480
|
+
function readFile6(fileName, _encoding) {
|
|
39946
40481
|
let buffer;
|
|
39947
40482
|
try {
|
|
39948
40483
|
buffer = _fs.readFileSync(fileName);
|
|
@@ -40539,11 +41074,11 @@ ${lanes.join(`
|
|
|
40539
41074
|
return toComponents;
|
|
40540
41075
|
}
|
|
40541
41076
|
const components = toComponents.slice(start2);
|
|
40542
|
-
const
|
|
41077
|
+
const relative3 = [];
|
|
40543
41078
|
for (;start2 < fromComponents.length; start2++) {
|
|
40544
|
-
|
|
41079
|
+
relative3.push("..");
|
|
40545
41080
|
}
|
|
40546
|
-
return ["", ...
|
|
41081
|
+
return ["", ...relative3, ...components];
|
|
40547
41082
|
}
|
|
40548
41083
|
function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
|
|
40549
41084
|
Debug.assert(getRootLength(fromDirectory) > 0 === getRootLength(to) > 0, "Paths must either both be absolute or both be relative");
|
|
@@ -43018,10 +43553,10 @@ ${lanes.join(`
|
|
|
43018
43553
|
if (pos1 === pos2)
|
|
43019
43554
|
return 0;
|
|
43020
43555
|
const lineStarts = getLineStarts(sourceFile);
|
|
43021
|
-
const
|
|
43022
|
-
const isNegative =
|
|
43556
|
+
const lower2 = Math.min(pos1, pos2);
|
|
43557
|
+
const isNegative = lower2 === pos2;
|
|
43023
43558
|
const upper = isNegative ? pos1 : pos2;
|
|
43024
|
-
const lowerLine = computeLineOfPosition(lineStarts,
|
|
43559
|
+
const lowerLine = computeLineOfPosition(lineStarts, lower2);
|
|
43025
43560
|
const upperLine = computeLineOfPosition(lineStarts, upper, lowerLine);
|
|
43026
43561
|
return isNegative ? lowerLine - upperLine : upperLine - lowerLine;
|
|
43027
43562
|
}
|
|
@@ -71009,7 +71544,7 @@ ${lanes.join(`
|
|
|
71009
71544
|
const possibleOption = getSpellingSuggestion(unknownOption, diagnostics.optionDeclarations, getOptionName);
|
|
71010
71545
|
return possibleOption ? createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, node, diagnostics.unknownDidYouMeanDiagnostic, unknownOptionErrorText || unknownOption, possibleOption.name) : createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, node, diagnostics.unknownOptionDiagnostic, unknownOptionErrorText || unknownOption);
|
|
71011
71546
|
}
|
|
71012
|
-
function parseCommandLineWorker(diagnostics, commandLine,
|
|
71547
|
+
function parseCommandLineWorker(diagnostics, commandLine, readFile6) {
|
|
71013
71548
|
const options = {};
|
|
71014
71549
|
let watchOptions;
|
|
71015
71550
|
const fileNames = [];
|
|
@@ -71047,7 +71582,7 @@ ${lanes.join(`
|
|
|
71047
71582
|
}
|
|
71048
71583
|
}
|
|
71049
71584
|
function parseResponseFile(fileName) {
|
|
71050
|
-
const text2 = tryReadFile(fileName,
|
|
71585
|
+
const text2 = tryReadFile(fileName, readFile6 || ((fileName2) => sys.readFile(fileName2)));
|
|
71051
71586
|
if (!isString(text2)) {
|
|
71052
71587
|
errors.push(text2);
|
|
71053
71588
|
return;
|
|
@@ -71150,8 +71685,8 @@ ${lanes.join(`
|
|
|
71150
71685
|
unknownDidYouMeanDiagnostic: Diagnostics.Unknown_compiler_option_0_Did_you_mean_1,
|
|
71151
71686
|
optionTypeMismatchDiagnostic: Diagnostics.Compiler_option_0_expects_an_argument
|
|
71152
71687
|
};
|
|
71153
|
-
function parseCommandLine(commandLine,
|
|
71154
|
-
return parseCommandLineWorker(compilerOptionsDidYouMeanDiagnostics, commandLine,
|
|
71688
|
+
function parseCommandLine(commandLine, readFile6) {
|
|
71689
|
+
return parseCommandLineWorker(compilerOptionsDidYouMeanDiagnostics, commandLine, readFile6);
|
|
71155
71690
|
}
|
|
71156
71691
|
function getOptionFromName(optionName, allowShort) {
|
|
71157
71692
|
return getOptionDeclarationFromName(getOptionsNameMap, optionName, allowShort);
|
|
@@ -71219,8 +71754,8 @@ ${lanes.join(`
|
|
|
71219
71754
|
result.originalFileName = result.fileName;
|
|
71220
71755
|
return parseJsonSourceFileConfigFileContent(result, host, getNormalizedAbsolutePath(getDirectoryPath(configFileName), cwd), optionsToExtend, getNormalizedAbsolutePath(configFileName, cwd), undefined, extraFileExtensions, extendedConfigCache, watchOptionsToExtend);
|
|
71221
71756
|
}
|
|
71222
|
-
function readConfigFile(fileName,
|
|
71223
|
-
const textOrDiagnostic = tryReadFile(fileName,
|
|
71757
|
+
function readConfigFile(fileName, readFile6) {
|
|
71758
|
+
const textOrDiagnostic = tryReadFile(fileName, readFile6);
|
|
71224
71759
|
return isString(textOrDiagnostic) ? parseConfigFileTextToJson(fileName, textOrDiagnostic) : { config: {}, error: textOrDiagnostic };
|
|
71225
71760
|
}
|
|
71226
71761
|
function parseConfigFileTextToJson(fileName, jsonText) {
|
|
@@ -71230,14 +71765,14 @@ ${lanes.join(`
|
|
|
71230
71765
|
error: jsonSourceFile.parseDiagnostics.length ? jsonSourceFile.parseDiagnostics[0] : undefined
|
|
71231
71766
|
};
|
|
71232
71767
|
}
|
|
71233
|
-
function readJsonConfigFile(fileName,
|
|
71234
|
-
const textOrDiagnostic = tryReadFile(fileName,
|
|
71768
|
+
function readJsonConfigFile(fileName, readFile6) {
|
|
71769
|
+
const textOrDiagnostic = tryReadFile(fileName, readFile6);
|
|
71235
71770
|
return isString(textOrDiagnostic) ? parseJsonText(fileName, textOrDiagnostic) : { fileName, parseDiagnostics: [textOrDiagnostic] };
|
|
71236
71771
|
}
|
|
71237
|
-
function tryReadFile(fileName,
|
|
71772
|
+
function tryReadFile(fileName, readFile6) {
|
|
71238
71773
|
let text2;
|
|
71239
71774
|
try {
|
|
71240
|
-
text2 =
|
|
71775
|
+
text2 = readFile6(fileName);
|
|
71241
71776
|
} catch (e) {
|
|
71242
71777
|
return createCompilerDiagnostic(Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message);
|
|
71243
71778
|
}
|
|
@@ -77916,9 +78451,9 @@ ${lanes.join(`
|
|
|
77916
78451
|
if (!startsWithDirectory(target, realPathDirectory, getCanonicalFileName)) {
|
|
77917
78452
|
return;
|
|
77918
78453
|
}
|
|
77919
|
-
const
|
|
78454
|
+
const relative3 = getRelativePathFromDirectory(realPathDirectory, target, getCanonicalFileName);
|
|
77920
78455
|
for (const symlinkDirectory of symlinkDirectories) {
|
|
77921
|
-
const option2 = resolvePath(symlinkDirectory,
|
|
78456
|
+
const option2 = resolvePath(symlinkDirectory, relative3);
|
|
77922
78457
|
const result2 = cb(option2, target === referenceRedirect);
|
|
77923
78458
|
shouldFilterIgnoredPaths = true;
|
|
77924
78459
|
if (result2)
|
|
@@ -139132,12 +139667,12 @@ ${lanes.join(`
|
|
|
139132
139667
|
function createCompilerHost(options, setParentNodes) {
|
|
139133
139668
|
return createCompilerHostWorker(options, setParentNodes);
|
|
139134
139669
|
}
|
|
139135
|
-
function createGetSourceFile(
|
|
139670
|
+
function createGetSourceFile(readFile6, setParentNodes) {
|
|
139136
139671
|
return (fileName, languageVersionOrOptions, onError) => {
|
|
139137
139672
|
let text2;
|
|
139138
139673
|
try {
|
|
139139
139674
|
mark2("beforeIORead");
|
|
139140
|
-
text2 =
|
|
139675
|
+
text2 = readFile6(fileName);
|
|
139141
139676
|
mark2("afterIORead");
|
|
139142
139677
|
measure("I/O Read", "beforeIORead", "afterIORead");
|
|
139143
139678
|
} catch (e) {
|
|
@@ -139928,7 +140463,7 @@ ${lanes.join(`
|
|
|
139928
140463
|
getRedirectFromOutput,
|
|
139929
140464
|
forEachResolvedProjectReference: forEachResolvedProjectReference2
|
|
139930
140465
|
});
|
|
139931
|
-
const
|
|
140466
|
+
const readFile6 = host.readFile.bind(host);
|
|
139932
140467
|
(_e = tracing) == null || _e.push(tracing.Phase.Program, "shouldProgramCreateNewSourceFiles", { hasOldProgram: !!oldProgram });
|
|
139933
140468
|
const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options);
|
|
139934
140469
|
(_f = tracing) == null || _f.pop();
|
|
@@ -140105,7 +140640,7 @@ ${lanes.join(`
|
|
|
140105
140640
|
shouldTransformImportCall,
|
|
140106
140641
|
emitBuildInfo,
|
|
140107
140642
|
fileExists,
|
|
140108
|
-
readFile:
|
|
140643
|
+
readFile: readFile6,
|
|
140109
140644
|
directoryExists,
|
|
140110
140645
|
getSymlinkCache,
|
|
140111
140646
|
realpath: (_o = host.realpath) == null ? undefined : _o.bind(host),
|
|
@@ -202995,7 +203530,7 @@ var require_path_browserify = __commonJS((exports, module2) => {
|
|
|
202995
203530
|
return ".";
|
|
202996
203531
|
return posix.normalize(joined);
|
|
202997
203532
|
},
|
|
202998
|
-
relative: function
|
|
203533
|
+
relative: function relative3(from, to) {
|
|
202999
203534
|
assertPath(from);
|
|
203000
203535
|
assertPath(to);
|
|
203001
203536
|
if (from === to)
|
|
@@ -205817,12 +206352,12 @@ var require_dist2 = __commonJS((exports) => {
|
|
|
205817
206352
|
return patterns.length > 0 ? buildCrawler(options, patterns) : [];
|
|
205818
206353
|
}
|
|
205819
206354
|
async function glob(globInput, options) {
|
|
205820
|
-
const [crawler,
|
|
205821
|
-
return crawler ? formatPaths(await crawler.withPromise(),
|
|
206355
|
+
const [crawler, relative3] = getCrawler(globInput, options);
|
|
206356
|
+
return crawler ? formatPaths(await crawler.withPromise(), relative3) : [];
|
|
205822
206357
|
}
|
|
205823
206358
|
function globSync(globInput, options) {
|
|
205824
|
-
const [crawler,
|
|
205825
|
-
return crawler ? formatPaths(crawler.sync(),
|
|
206359
|
+
const [crawler, relative3] = getCrawler(globInput, options);
|
|
206360
|
+
return crawler ? formatPaths(crawler.sync(), relative3) : [];
|
|
205826
206361
|
}
|
|
205827
206362
|
exports.convertPathToPattern = convertPathToPattern;
|
|
205828
206363
|
exports.escapePath = escapePath;
|
|
@@ -280394,7 +280929,7 @@ var exports_regex = {};
|
|
|
280394
280929
|
__export(exports_regex, {
|
|
280395
280930
|
RegexBackend: () => RegexBackend
|
|
280396
280931
|
});
|
|
280397
|
-
import { readFile as
|
|
280932
|
+
import { readFile as readFile6 } from "fs/promises";
|
|
280398
280933
|
import { resolve as resolve7 } from "path";
|
|
280399
280934
|
function getPatternsForLanguage(language) {
|
|
280400
280935
|
switch (language) {
|
|
@@ -280769,7 +281304,7 @@ class RegexBackend {
|
|
|
280769
281304
|
return this.cache.get(resolve7(file));
|
|
280770
281305
|
}
|
|
280771
281306
|
try {
|
|
280772
|
-
return await
|
|
281307
|
+
return await readFile6(resolve7(file), "utf-8");
|
|
280773
281308
|
} catch {
|
|
280774
281309
|
return null;
|
|
280775
281310
|
}
|
|
@@ -281200,8 +281735,8 @@ var LANG_ALIASES = {
|
|
|
281200
281735
|
};
|
|
281201
281736
|
var SHIKI_LANGS = ["typescript", "javascript", "tsx", "jsx", "python", "rust", "go", "bash", "json", "yaml", "toml", "html", "css", "sql", "markdown", "ruby", "java", "kotlin", "swift", "c", "cpp", "csharp", "php", "lua", "zig", "elixir", "haskell", "ocaml", "scala", "dart", "dockerfile", "graphql", "terraform", "vim", "diff", "ini", "xml"];
|
|
281202
281737
|
function normalizeLang(lang254) {
|
|
281203
|
-
const
|
|
281204
|
-
return LANG_ALIASES[
|
|
281738
|
+
const lower2 = lang254.toLowerCase().trim();
|
|
281739
|
+
return LANG_ALIASES[lower2] ?? lower2;
|
|
281205
281740
|
}
|
|
281206
281741
|
async function ensureHighlighter() {
|
|
281207
281742
|
if (highlighter)
|
|
@@ -281278,9 +281813,12 @@ var handlers = {
|
|
|
281278
281813
|
findSymbols: (name2) => requireRepoMap().findSymbols(name2),
|
|
281279
281814
|
findSymbol: (name2) => requireRepoMap().findSymbol(name2),
|
|
281280
281815
|
searchSymbolsSubstring: (query, limit) => requireRepoMap().searchSymbolsSubstring(query, limit),
|
|
281816
|
+
searchTrigramCandidates: (pattern, limit) => requireRepoMap().searchTrigramCandidates(pattern, limit),
|
|
281281
281817
|
searchSymbolsFts: (query, limit) => requireRepoMap().searchSymbolsFts(query, limit),
|
|
281282
281818
|
getFileSymbols: (relPath) => requireRepoMap().getFileSymbols(relPath),
|
|
281283
281819
|
getFileSymbolRanges: (relPath) => requireRepoMap().getFileSymbolRanges(relPath),
|
|
281820
|
+
getEnclosingSymbols: (relPath) => requireRepoMap().getEnclosingSymbols(relPath),
|
|
281821
|
+
resolveMoniker: (moniker) => requireRepoMap().resolveMoniker(moniker),
|
|
281284
281822
|
getSymbolSignature: (name2) => requireRepoMap().getSymbolSignature(name2),
|
|
281285
281823
|
getSymbolsByKind: (kind, limit) => requireRepoMap().getSymbolsByKind(kind, limit),
|
|
281286
281824
|
matchFiles: (pattern, limit) => requireRepoMap().matchFiles(pattern, limit),
|