Skip to content

Commit 941822c

Browse files
committed
hardcode top-level file set
avoids unimported non-toplevel fsh/vsh/etc files being treated as toplevel
1 parent 3b568ea commit 941822c

File tree

1 file changed

+66
-13
lines changed

1 file changed

+66
-13
lines changed

server/main/src/main.rs

Lines changed: 66 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,54 @@ mod test;
6060

6161
lazy_static! {
6262
static ref RE_INCLUDE: Regex = Regex::new(r#"^(?:\s)*?(?:#include) "(.+)"\r?"#).unwrap();
63+
static ref TOPLEVEL_FILES: HashSet<PathBuf> = {
64+
let mut set = HashSet::with_capacity(6864);
65+
for folder in ["shaders/", "shaders/world0/", "shaders/world1/", "shaders/world-1/"] {
66+
for ext in ["fsh", "vsh", "gsh", "csh"] {
67+
set.insert(format!("{}composite.{}", folder, ext).into());
68+
for i in 1..=99 {
69+
set.insert(format!("{}composite{}.{}", folder, i, ext).into());
70+
set.insert(format!("{}deferred{}.{}", folder, i, ext).into());
71+
set.insert(format!("{}prepare{}.{}", folder, i, ext).into());
72+
set.insert(format!("{}shadowcomp{}.{}", folder, i, ext).into());
73+
}
74+
set.insert(format!("{}composite_pre.{}", folder, ext).into());
75+
set.insert(format!("{}deferred.{}", folder, ext).into());
76+
set.insert(format!("{}deferred_pre.{}", folder, ext).into());
77+
set.insert(format!("{}final.{}", folder, ext).into());
78+
set.insert(format!("{}gbuffers_armor_glint.{}", folder, ext).into());
79+
set.insert(format!("{}gbuffers_basic.{}", folder, ext).into());
80+
set.insert(format!("{}gbuffers_beaconbeam.{}", folder, ext).into());
81+
set.insert(format!("{}gbuffers_block.{}", folder, ext).into());
82+
set.insert(format!("{}gbuffers_clouds.{}", folder, ext).into());
83+
set.insert(format!("{}gbuffers_damagedblock.{}", folder, ext).into());
84+
set.insert(format!("{}gbuffers_entities.{}", folder, ext).into());
85+
set.insert(format!("{}gbuffers_entities_glowing.{}", folder, ext).into());
86+
set.insert(format!("{}gbuffers_hand.{}", folder, ext).into());
87+
set.insert(format!("{}gbuffers_hand.{}", folder, ext).into());
88+
set.insert(format!("{}gbuffers_hand_water.{}", folder, ext).into());
89+
set.insert(format!("{}gbuffers_item.{}", folder, ext).into());
90+
set.insert(format!("{}gbuffers_line.{}", folder, ext).into());
91+
set.insert(format!("{}gbuffers_skybasic.{}", folder, ext).into());
92+
set.insert(format!("{}gbuffers_skytextured.{}", folder, ext).into());
93+
set.insert(format!("{}gbuffers_spidereyes.{}", folder, ext).into());
94+
set.insert(format!("{}gbuffers_terrain.{}", folder, ext).into());
95+
set.insert(format!("{}gbuffers_terrain_cutout.{}", folder, ext).into());
96+
set.insert(format!("{}gbuffers_terrain_cutout_mip.{}", folder, ext).into());
97+
set.insert(format!("{}gbuffers_terrain_solid.{}", folder, ext).into());
98+
set.insert(format!("{}gbuffers_textured.{}", folder, ext).into());
99+
set.insert(format!("{}gbuffers_textured_lit.{}", folder, ext).into());
100+
set.insert(format!("{}gbuffers_water.{}", folder, ext).into());
101+
set.insert(format!("{}gbuffers_weather.{}", folder, ext).into());
102+
set.insert(format!("{}prepare.{}", folder, ext).into());
103+
set.insert(format!("{}shadow.{}", folder, ext).into());
104+
set.insert(format!("{}shadow_cutout.{}", folder, ext).into());
105+
set.insert(format!("{}shadow_solid.{}", folder, ext).into());
106+
set.insert(format!("{}shadowcomp.{}", folder, ext).into());
107+
}
108+
}
109+
set
110+
};
63111
}
64112

65113
fn main() {
@@ -156,7 +204,7 @@ impl MinecraftShaderLanguageServer {
156204
}
157205
}
158206

159-
pub fn gen_initial_graph(&self) {
207+
fn build_initial_graph(&self) {
160208
info!("generating graph for current root"; "root" => self.root.to_str().unwrap());
161209

162210
// filter directories and files not ending in any of the 3 extensions
@@ -341,6 +389,13 @@ impl MinecraftShaderLanguageServer {
341389
return Ok(diagnostics);
342390
}
343391
};
392+
393+
if !TOPLEVEL_FILES.contains(root_path.strip_prefix(&self.root).unwrap()) {
394+
warn!("got a non-valid toplevel file"; "root_ancestor" => root_path.to_str().unwrap(), "stripped" => root_path.strip_prefix(&self.root).unwrap().to_str().unwrap());
395+
back_fill(&all_sources, &mut diagnostics);
396+
return Ok(diagnostics);
397+
}
398+
344399
let tree_type = if ext == "fsh" {
345400
TreeType::Fragment
346401
} else if ext == "vsh" {
@@ -350,12 +405,7 @@ impl MinecraftShaderLanguageServer {
350405
} else if ext == "csh" {
351406
TreeType::Compute
352407
} else {
353-
warn!(
354-
"got a non fsh|vsh|gsh|csh as a file root ancestor, skipping lint";
355-
"extension" => ext, "root_ancestor" => root_path.to_str().unwrap()
356-
);
357-
back_fill(&all_sources, &mut diagnostics);
358-
return Ok(diagnostics);
408+
unreachable!();
359409
};
360410

361411
let stdout = match self.compile_shader_source(&view, tree_type, &root_path) {
@@ -387,6 +437,12 @@ impl MinecraftShaderLanguageServer {
387437
Some(ext) => ext.to_str().unwrap(),
388438
None => continue,
389439
};
440+
441+
if !TOPLEVEL_FILES.contains(root_path.strip_prefix(&self.root).unwrap()) {
442+
warn!("got a non-valid toplevel file"; "root_ancestor" => root_path.to_str().unwrap(), "stripped" => root_path.strip_prefix(&self.root).unwrap().to_str().unwrap());
443+
continue;
444+
}
445+
390446
let tree_type = if ext == "fsh" {
391447
TreeType::Fragment
392448
} else if ext == "vsh" {
@@ -396,11 +452,7 @@ impl MinecraftShaderLanguageServer {
396452
} else if ext == "csh" {
397453
TreeType::Compute
398454
} else {
399-
warn!(
400-
"got a non fsh|vsh|gsh|csh as a file root ancestor, skipping lint";
401-
"extension" => ext, "root_ancestor" => root_path.to_str().unwrap()
402-
);
403-
continue;
455+
unreachable!();
404456
};
405457

406458
let sources = self.load_sources(&nodes)?;
@@ -566,7 +618,8 @@ impl LanguageServerHandling for MinecraftShaderLanguageServer {
566618

567619
self.root = root;
568620

569-
self.gen_initial_graph();
621+
622+
self.build_initial_graph();
570623

571624
self.set_status("ready", "Project initialized", "$(check)");
572625
});

0 commit comments

Comments
 (0)