Skip to content

Commit 83c86ae

Browse files
authored
Merge pull request #42 from BalintCsala/top_level_check
Fixes top level check to account for mod-added dimensions
2 parents d8d77ac + 0768abb commit 83c86ae

File tree

2 files changed

+56
-46
lines changed

2 files changed

+56
-46
lines changed

package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/main/src/main.rs

Lines changed: 55 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use rust_lsp::lsp::*;
77
use rust_lsp::lsp_types::{notification::*, *};
88

99
use petgraph::stable_graph::NodeIndex;
10+
use path_slash::PathExt;
1011

1112
use serde::Deserialize;
1213
use serde_json::{from_value, Value};
@@ -58,53 +59,61 @@ mod url_norm;
5859
#[cfg(test)]
5960
mod test;
6061

62+
pub fn is_top_level(path: &Path) -> bool {
63+
let path = path.to_slash().unwrap();
64+
if !RE_WORLD_FOLDER.is_match(&path) {
65+
return false;
66+
}
67+
let parts: Vec<&str> = path.split("/").collect();
68+
let len = parts.len();
69+
(len == 3 || len == 2) && TOPLEVEL_FILES.contains(parts[len - 1])
70+
}
71+
6172
lazy_static! {
6273
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());
74+
static ref RE_WORLD_FOLDER: Regex = Regex::new(r#"^shaders(/world-?\d+)?"#).unwrap();
75+
static ref TOPLEVEL_FILES: HashSet<String> = {
76+
let mut set = HashSet::with_capacity(1716);
77+
for ext in ["fsh", "vsh", "gsh", "csh"] {
78+
set.insert(format!("composite.{}", ext));
79+
set.insert(format!("deferred.{}", ext));
80+
set.insert(format!("prepare.{}", ext));
81+
set.insert(format!("shadowcomp.{}", ext));
82+
for i in 1..=99 {
83+
set.insert(format!("composite{}.{}", i, ext));
84+
set.insert(format!("deferred{}.{}", i, ext));
85+
set.insert(format!("prepare{}.{}", i, ext));
86+
set.insert(format!("shadowcomp{}.{}", i, ext));
10787
}
88+
set.insert(format!("composite_pre.{}", ext));
89+
set.insert(format!("deferred_pre.{}", ext));
90+
set.insert(format!("final.{}", ext));
91+
set.insert(format!("gbuffers_armor_glint.{}", ext));
92+
set.insert(format!("gbuffers_basic.{}", ext));
93+
set.insert(format!("gbuffers_beaconbeam.{}", ext));
94+
set.insert(format!("gbuffers_block.{}", ext));
95+
set.insert(format!("gbuffers_clouds.{}", ext));
96+
set.insert(format!("gbuffers_damagedblock.{}", ext));
97+
set.insert(format!("gbuffers_entities.{}", ext));
98+
set.insert(format!("gbuffers_entities_glowing.{}", ext));
99+
set.insert(format!("gbuffers_hand.{}", ext));
100+
set.insert(format!("gbuffers_hand_water.{}", ext));
101+
set.insert(format!("gbuffers_item.{}", ext));
102+
set.insert(format!("gbuffers_line.{}", ext));
103+
set.insert(format!("gbuffers_skybasic.{}", ext));
104+
set.insert(format!("gbuffers_skytextured.{}", ext));
105+
set.insert(format!("gbuffers_spidereyes.{}", ext));
106+
set.insert(format!("gbuffers_terrain.{}", ext));
107+
set.insert(format!("gbuffers_terrain_cutout.{}", ext));
108+
set.insert(format!("gbuffers_terrain_cutout_mip.{}", ext));
109+
set.insert(format!("gbuffers_terrain_solid.{}", ext));
110+
set.insert(format!("gbuffers_textured.{}", ext));
111+
set.insert(format!("gbuffers_textured_lit.{}", ext));
112+
set.insert(format!("gbuffers_water.{}", ext));
113+
set.insert(format!("gbuffers_weather.{}", ext));
114+
set.insert(format!("shadow.{}", ext));
115+
set.insert(format!("shadow_cutout.{}", ext));
116+
set.insert(format!("shadow_solid.{}", ext));
108117
}
109118
set
110119
};
@@ -390,7 +399,7 @@ impl MinecraftShaderLanguageServer {
390399
}
391400
};
392401

393-
if !TOPLEVEL_FILES.contains(root_path.strip_prefix(&self.root).unwrap()) {
402+
if !is_top_level(root_path.strip_prefix(&self.root).unwrap()) {
394403
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());
395404
back_fill(&all_sources, &mut diagnostics);
396405
return Ok(diagnostics);
@@ -438,7 +447,7 @@ impl MinecraftShaderLanguageServer {
438447
None => continue,
439448
};
440449

441-
if !TOPLEVEL_FILES.contains(root_path.strip_prefix(&self.root).unwrap()) {
450+
if !is_top_level(root_path.strip_prefix(&self.root).unwrap()) {
442451
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());
443452
continue;
444453
}

0 commit comments

Comments
 (0)