浏览代码

LSP: Improve handling of file URI scheme

Fixes #63205.

(cherry picked from commits 3fa943fe2320f28fd6c7a6910f27cf9c91f41e46,
42a16ef76e4100c285a4a8c17f22a199986072a7 and
2ff69d61813e1176daca5e6baee5e9f6106bf371)
Lamia 3 年之前
父节点
当前提交
a412922c2b

+ 3 - 1
modules/gdscript/language_server/gdscript_language_protocol.cpp

@@ -183,7 +183,9 @@ Dictionary GDScriptLanguageProtocol::initialize(const Dictionary &p_params) {
 	if (root_uri.length() && is_same_workspace) {
 		workspace->root_uri = root_uri;
 	} else {
-		workspace->root_uri = "file://" + workspace->root;
+		String r_root = workspace->root;
+		r_root = r_root.lstrip("/");
+		workspace->root_uri = "file:///" + r_root;
 
 		Dictionary params;
 		params["path"] = workspace->root;

+ 3 - 3
modules/gdscript/language_server/gdscript_workspace.cpp

@@ -496,9 +496,9 @@ Error GDScriptWorkspace::parse_local_script(const String &p_path) {
 }
 
 String GDScriptWorkspace::get_file_path(const String &p_uri) const {
-	String path = p_uri;
-	path = path.replace(root_uri + "/", "res://");
-	path = path.http_unescape();
+	String path = p_uri.http_unescape();
+	String base_uri = root_uri.http_unescape();
+	path = path.replacen(base_uri + "/", "res://");
 	return path;
 }