Skip to content

Commit d5b0dcf

Browse files
committed
wip
1 parent f8dd31c commit d5b0dcf

File tree

5 files changed

+35
-10
lines changed

5 files changed

+35
-10
lines changed

server/Cargo.lock

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

server/src/diagnostics_parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ where
1414
T: opengl::ShaderValidator + ?Sized,
1515
{
1616
RE_DIAGNOSTIC.get_or_init(|| match vendor.vendor().as_str() {
17-
"NVIDIA" => {
17+
"NVIDIA Corporation" => {
1818
Regex::new(r#"^(?P<filepath>[^?<>*|"]+)\((?P<linenum>\d+)\) : (?P<severity>error|warning) [A-C]\d+: (?P<output>.+)"#).unwrap()
1919
}
2020
_ => {

server/src/main.rs

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use petgraph::stable_graph::NodeIndex;
77
use serde::Deserialize;
88
use serde_json::{from_value, Value};
99

10-
use tree_sitter::Parser;
10+
use tree_sitter::{Parser, Point};
1111
use url_norm::FromUrl;
1212

1313
use walkdir::WalkDir;
@@ -39,10 +39,10 @@ use regex::Regex;
3939
use lazy_static::lazy_static;
4040

4141
mod commands;
42-
mod diagnostics_parser;
4342
mod configuration;
4443
mod consts;
4544
mod dfs;
45+
mod diagnostics_parser;
4646
mod graph;
4747
mod logging;
4848
mod lsp_ext;
@@ -352,7 +352,11 @@ impl MinecraftShaderLanguageServer {
352352
return Ok(diagnostics);
353353
}
354354
};
355-
diagnostics.extend(diagnostics_parser::parse_diagnostics_output(stdout, uri, self.opengl_context.as_ref()));
355+
diagnostics.extend(diagnostics_parser::parse_diagnostics_output(
356+
stdout,
357+
uri,
358+
self.opengl_context.as_ref(),
359+
));
356360
} else {
357361
let mut all_trees: Vec<(TreeType, Vec<(NodeIndex, Option<_>)>)> = Vec::new();
358362

@@ -402,7 +406,11 @@ impl MinecraftShaderLanguageServer {
402406
Some(s) => s,
403407
None => continue,
404408
};
405-
diagnostics.extend(diagnostics_parser::parse_diagnostics_output(stdout, uri, self.opengl_context.as_ref()));
409+
diagnostics.extend(diagnostics_parser::parse_diagnostics_output(
410+
stdout,
411+
uri,
412+
self.opengl_context.as_ref(),
413+
));
406414
}
407415
};
408416

@@ -488,6 +496,7 @@ impl LanguageServerHandling for MinecraftShaderLanguageServer {
488496
info!("starting server...");
489497

490498
let capabilities = ServerCapabilities {
499+
definition_provider: Some(OneOf::Left(true)),
491500
document_link_provider: Some(DocumentLinkOptions {
492501
resolve_provider: None,
493502
work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None },
@@ -660,7 +669,23 @@ impl LanguageServerHandling for MinecraftShaderLanguageServer {
660669
completable.complete(Err(Self::error_not_available(())));
661670
}
662671

663-
fn goto_definition(&mut self, _: TextDocumentPositionParams, completable: LSCompletable<Vec<Location>>) {
672+
fn goto_definition(&mut self, params: TextDocumentPositionParams, completable: LSCompletable<Vec<Location>>) {
673+
let source = fs::read_to_string(params.text_document.uri.path()).unwrap();
674+
let tree = self.tree_sitter.borrow_mut().parse(source, None).unwrap();
675+
676+
let node_at_pos = tree.root_node().named_descendant_for_point_range(
677+
Point {
678+
row: params.position.line as usize,
679+
column: params.position.character as usize,
680+
},
681+
Point {
682+
row: params.position.line as usize,
683+
column: (params.position.character + 1) as usize,
684+
},
685+
);
686+
687+
info!("found a node"; "node" => format!("{:?}", node_at_pos));
688+
664689
completable.complete(Err(Self::error_not_available(())));
665690
}
666691

server/src/opengl.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::ffi::{CStr, CString};
22
use std::ptr;
33

4-
use slog_scope::{debug, info};
4+
use slog_scope::info;
55

66
#[cfg(test)]
77
use mockall::automock;
@@ -32,7 +32,7 @@ impl OpenGlContext {
3232
let gl_ctx = OpenGlContext { _ctx: gl_window };
3333

3434
unsafe {
35-
debug!(
35+
info!(
3636
"OpenGL device";
3737
"vendor" => gl_ctx.vendor(),
3838
"version" => String::from_utf8(CStr::from_ptr(gl::GetString(gl::VERSION) as *const _).to_bytes().to_vec()).unwrap(),

server/src/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,7 @@ fn test_generate_merge_list_04() {
893893
#[test]
894894
fn test_nvidia_diagnostics() {
895895
let mut mockgl = opengl::MockShaderValidator::new();
896-
mockgl.expect_vendor().returning(|| "NVIDIA".into());
896+
mockgl.expect_vendor().returning(|| "NVIDIA Corporation".into());
897897
let server = new_temp_server(Some(Box::new(mockgl)));
898898

899899
let output = "/home/noah/.minecraft/shaderpacks/test/shaders/final.fsh(9) : error C0000: syntax error, unexpected '}', expecting ',' or ';' at token \"}\"";

0 commit comments

Comments
 (0)