1+++
2repository_url = "git@github.com:tree-sitter/tree-sitter"
3revision = "24007727d42b4caceda3095ac685c463fae1ba1a"
4+++
5
6## Edit History
7
8```diff
9--- a/tree-sitter/crates/loader/src/loader.rs
10+++ b/tree-sitter/crates/loader/src/loader.rs
11@@ -604,7 +604,7 @@
12
13 pub struct Loader {
14 pub parser_lib_path: PathBuf,
15- languages_by_id: Vec<(PathBuf, OnceCell<Language>, Option<Vec<PathBuf>>)>,
16+ languages_by_id: Vec<LanguageEntry>,
17 language_configurations: Vec<LanguageConfiguration<'static>>,
18 language_configuration_ids_by_file_type: HashMap<String, Vec<usize>>,
19 language_configuration_in_current_path: Option<usize>,
20@@ -619,6 +619,12 @@
21
22 #[cfg(feature = "wasm")]
23 wasm_store: Mutex<Option<tree_sitter::WasmStore>>,
24 }
25+
26+struct LanguageEntry {
27+ path: PathBuf,
28+ language: OnceCell<Language>,
29+ external_files: Option<Vec<PathBuf>>,
30+}
31
32 pub struct CompileConfig<'a> {
33@@ -767,7 +773,7 @@
34 pub fn get_all_language_configurations(&self) -> Vec<(&LanguageConfiguration, &Path)> {
35 self.language_configurations
36 .iter()
37- .map(|c| (c, self.languages_by_id[c.language_id].0.as_ref()))
38+ .map(|c| (c, self.languages_by_id[c.language_id].path.as_ref()))
39 .collect()
40 }
41
42@@ -920,7 +926,11 @@
43 }
44
45 fn language_for_id(&self, id: usize) -> LoaderResult<Language> {
46- let (path, language, externals) = &self.languages_by_id[id];
47+ let LanguageEntry {
48+ path,
49+ language,
50+ external_files,
51+ } = &self.languages_by_id[id];
52 language
53 .get_or_try_init(|| {
54 let src_path = path.join("src");
55```
56
57## Cursor Position
58
59```tree-sitter/crates/loader/src/loader.rs
60 let mut language_id = None;
61 for (id, (path, _, _)) in
62 // ^[CURSOR_POSITION]
63 self.languages_by_id.iter().enumerate().skip(language_count)
64 {
65 if language_path == *path {
66 language_id = Some(id);
67 }
68 }
69```
70
71## Expected Patch
72
73```diff
74--- a/tree-sitter/crates/loader/src/loader.rs
75+++ b/tree-sitter/crates/loader/src/loader.rs
76@@ -1542,8 +1542,7 @@
77 // Determine if a previous language configuration in this package.json file
78 // already uses the same language.
79 let mut language_id = None;
80- for (id, (path, _, _)) in
81- self.languages_by_id.iter().enumerate().skip(language_count)
82+ for (id, entry) in self.languages_by_id.iter().enumerate().skip(language_count)
83 {
84- if language_path == *path {
85+ if language_path == entry.path {
86 language_id = Some(id);
87 }
88 }
89```
90
91```diff
92--- a/tree-sitter/crates/loader/src/loader.rs
93+++ b/tree-sitter/crates/loader/src/loader.rs
94@@ -1542,8 +1542,7 @@
95 // Determine if a previous language configuration in this package.json file
96 // already uses the same language.
97 let mut language_id = None;
98- for (id, (path, _, _)) in
99+ for (id, LanguageEntry { path, .. }) in
100 self.languages_by_id.iter().enumerate().skip(language_count)
101 {
102 if language_path == *path {
103 language_id = Some(id);
104 }
105 }
106```