mirror of
https://github.com/Strum355/mcshader-lsp.git
synced 2025-07-24 11:44:44 +00:00
wip
This commit is contained in:
parent
f8dd31ca81
commit
d5b0dcffb2
5 changed files with 35 additions and 10 deletions
2
server/Cargo.lock
generated
2
server/Cargo.lock
generated
|
@ -736,7 +736,7 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
|
|||
|
||||
[[package]]
|
||||
name = "mcshader-lsp"
|
||||
version = "0.9.6"
|
||||
version = "0.9.5"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arc-swap",
|
||||
|
|
|
@ -14,7 +14,7 @@ where
|
|||
T: opengl::ShaderValidator + ?Sized,
|
||||
{
|
||||
RE_DIAGNOSTIC.get_or_init(|| match vendor.vendor().as_str() {
|
||||
"NVIDIA" => {
|
||||
"NVIDIA Corporation" => {
|
||||
Regex::new(r#"^(?P<filepath>[^?<>*|"]+)\((?P<linenum>\d+)\) : (?P<severity>error|warning) [A-C]\d+: (?P<output>.+)"#).unwrap()
|
||||
}
|
||||
_ => {
|
||||
|
|
|
@ -7,7 +7,7 @@ use petgraph::stable_graph::NodeIndex;
|
|||
use serde::Deserialize;
|
||||
use serde_json::{from_value, Value};
|
||||
|
||||
use tree_sitter::Parser;
|
||||
use tree_sitter::{Parser, Point};
|
||||
use url_norm::FromUrl;
|
||||
|
||||
use walkdir::WalkDir;
|
||||
|
@ -39,10 +39,10 @@ use regex::Regex;
|
|||
use lazy_static::lazy_static;
|
||||
|
||||
mod commands;
|
||||
mod diagnostics_parser;
|
||||
mod configuration;
|
||||
mod consts;
|
||||
mod dfs;
|
||||
mod diagnostics_parser;
|
||||
mod graph;
|
||||
mod logging;
|
||||
mod lsp_ext;
|
||||
|
@ -352,7 +352,11 @@ impl MinecraftShaderLanguageServer {
|
|||
return Ok(diagnostics);
|
||||
}
|
||||
};
|
||||
diagnostics.extend(diagnostics_parser::parse_diagnostics_output(stdout, uri, self.opengl_context.as_ref()));
|
||||
diagnostics.extend(diagnostics_parser::parse_diagnostics_output(
|
||||
stdout,
|
||||
uri,
|
||||
self.opengl_context.as_ref(),
|
||||
));
|
||||
} else {
|
||||
let mut all_trees: Vec<(TreeType, Vec<(NodeIndex, Option<_>)>)> = Vec::new();
|
||||
|
||||
|
@ -402,7 +406,11 @@ impl MinecraftShaderLanguageServer {
|
|||
Some(s) => s,
|
||||
None => continue,
|
||||
};
|
||||
diagnostics.extend(diagnostics_parser::parse_diagnostics_output(stdout, uri, self.opengl_context.as_ref()));
|
||||
diagnostics.extend(diagnostics_parser::parse_diagnostics_output(
|
||||
stdout,
|
||||
uri,
|
||||
self.opengl_context.as_ref(),
|
||||
));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -488,6 +496,7 @@ impl LanguageServerHandling for MinecraftShaderLanguageServer {
|
|||
info!("starting server...");
|
||||
|
||||
let capabilities = ServerCapabilities {
|
||||
definition_provider: Some(OneOf::Left(true)),
|
||||
document_link_provider: Some(DocumentLinkOptions {
|
||||
resolve_provider: None,
|
||||
work_done_progress_options: WorkDoneProgressOptions { work_done_progress: None },
|
||||
|
@ -660,7 +669,23 @@ impl LanguageServerHandling for MinecraftShaderLanguageServer {
|
|||
completable.complete(Err(Self::error_not_available(())));
|
||||
}
|
||||
|
||||
fn goto_definition(&mut self, _: TextDocumentPositionParams, completable: LSCompletable<Vec<Location>>) {
|
||||
fn goto_definition(&mut self, params: TextDocumentPositionParams, completable: LSCompletable<Vec<Location>>) {
|
||||
let source = fs::read_to_string(params.text_document.uri.path()).unwrap();
|
||||
let tree = self.tree_sitter.borrow_mut().parse(source, None).unwrap();
|
||||
|
||||
let node_at_pos = tree.root_node().named_descendant_for_point_range(
|
||||
Point {
|
||||
row: params.position.line as usize,
|
||||
column: params.position.character as usize,
|
||||
},
|
||||
Point {
|
||||
row: params.position.line as usize,
|
||||
column: (params.position.character + 1) as usize,
|
||||
},
|
||||
);
|
||||
|
||||
info!("found a node"; "node" => format!("{:?}", node_at_pos));
|
||||
|
||||
completable.complete(Err(Self::error_not_available(())));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
use std::ffi::{CStr, CString};
|
||||
use std::ptr;
|
||||
|
||||
use slog_scope::{debug, info};
|
||||
use slog_scope::info;
|
||||
|
||||
#[cfg(test)]
|
||||
use mockall::automock;
|
||||
|
@ -32,7 +32,7 @@ impl OpenGlContext {
|
|||
let gl_ctx = OpenGlContext { _ctx: gl_window };
|
||||
|
||||
unsafe {
|
||||
debug!(
|
||||
info!(
|
||||
"OpenGL device";
|
||||
"vendor" => gl_ctx.vendor(),
|
||||
"version" => String::from_utf8(CStr::from_ptr(gl::GetString(gl::VERSION) as *const _).to_bytes().to_vec()).unwrap(),
|
||||
|
|
|
@ -893,7 +893,7 @@ fn test_generate_merge_list_04() {
|
|||
#[test]
|
||||
fn test_nvidia_diagnostics() {
|
||||
let mut mockgl = opengl::MockShaderValidator::new();
|
||||
mockgl.expect_vendor().returning(|| "NVIDIA".into());
|
||||
mockgl.expect_vendor().returning(|| "NVIDIA Corporation".into());
|
||||
let server = new_temp_server(Some(Box::new(mockgl)));
|
||||
|
||||
let output = "/home/noah/.minecraft/shaderpacks/test/shaders/final.fsh(9) : error C0000: syntax error, unexpected '}', expecting ',' or ';' at token \"}\"";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue