From 0d767c58da38754e99aead31b1444f56fe43f058 Mon Sep 17 00:00:00 2001 From: agoel111 <153257819+agoel111@users.noreply.github.com> Date: Sat, 8 Mar 2025 11:51:31 +0000 Subject: [PATCH 1/4] Added Failing Test For TS Language Server with Cross File Definitions & References --- .../test_sync_multilspy_javascript.py | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/multilspy/test_sync_multilspy_javascript.py b/tests/multilspy/test_sync_multilspy_javascript.py index 00d1e1c..37534dd 100644 --- a/tests/multilspy/test_sync_multilspy_javascript.py +++ b/tests/multilspy/test_sync_multilspy_javascript.py @@ -47,3 +47,45 @@ def test_sync_multilspy_javascript_exceljs() -> None: {'range': {'start': {'line': 180, 'character': 16}, 'end': {'line': 180, 'character': 21}}, 'relativePath': path}, {'range': {'start': {'line': 185, 'character': 15}, 'end': {'line': 185, 'character': 20}}, 'relativePath': path} ] + +def test_sync_multilspy_javascript_exceljs_cross_file() -> None: + """ + Test the working of multilspy with javascript repository - exceljs + """ + code_language = Language.JAVASCRIPT + params = { + "code_language": code_language, + "repo_url": "https://github.com/exceljs/exceljs/", + "repo_commit": "ac96f9a61e9799c7776bd940f05c4a51d7200209" + } + with create_test_context(params) as context: + lsp = SyncLanguageServer.create(context.config, context.logger, context.source_directory) + + # All the communication with the language server must be performed inside the context manager + # The server process is started when the context manager is entered and is terminated when the context manager is exited. + with lsp.start_server(): + path = str(PurePath("lib/csv/csv.js")) + result = lsp.request_definition(path, 25, 8) + assert isinstance(result, list) + assert len(result) == 1 + + item = result[0] + assert item["relativePath"] == "lib/utils/stream-buf.js" + assert item["range"] == { + "start": {"line": 145, "character": 6}, + "end": {"line": 145, "character": 15}, + } + + result = lsp.request_references(path, 2, 9) + assert isinstance(result, list) + assert len(result) == 3 + + for item in result: + del item["uri"] + del item["absolutePath"] + + assert result == [ + {'range': {'start': {'line': 190, 'character': 17}, 'end': {'line': 190, 'character': 20}}, 'relativePath': "lib/csv/csv.js"}, + {'range': {'start': {'line': 5, 'character': 6}, 'end': {'line': 5, 'character': 9}}, 'relativePath': "lib/doc/workbook.js"}, + {'range': {'start': {'line': 38, 'character': 36}, 'end': {'line': 38, 'character': 39}}, 'relativePath': "lib/doc/workbook.js"}, + ] \ No newline at end of file From 04e8139627a545a5ea9b35fe84d6827fb6fc12d8 Mon Sep 17 00:00:00 2001 From: agoel111 <153257819+agoel111@users.noreply.github.com> Date: Tue, 11 Mar 2025 07:50:34 +0000 Subject: [PATCH 2/4] Cross File Reference Fix --- .../initialize_params.json | 3 +- .../test_sync_multilspy_javascript.py | 42 ++++++++++++------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/multilspy/language_servers/typescript_language_server/initialize_params.json b/src/multilspy/language_servers/typescript_language_server/initialize_params.json index 6209ba4..483d0c3 100644 --- a/src/multilspy/language_servers/typescript_language_server/initialize_params.json +++ b/src/multilspy/language_servers/typescript_language_server/initialize_params.json @@ -894,7 +894,8 @@ "scope": "workspace" } } - } + }, + "tsserver": { "useSyntaxServer": "never" } }, "trace": "verbose", "workspaceFolders": [ diff --git a/tests/multilspy/test_sync_multilspy_javascript.py b/tests/multilspy/test_sync_multilspy_javascript.py index 37534dd..ae5c4d7 100644 --- a/tests/multilspy/test_sync_multilspy_javascript.py +++ b/tests/multilspy/test_sync_multilspy_javascript.py @@ -1,8 +1,10 @@ """ This file contains tests for running the JavaScript Language Server: typescript-language-server """ - -from multilspy import SyncLanguageServer +import sys +sys.path.append("/workspaces/multilspy") +sys.path.append("/workspaces/multilspy/src") +from multilspy.language_server import SyncLanguageServer from multilspy.multilspy_config import Language from tests.test_utils import create_test_context from pathlib import PurePath @@ -48,15 +50,15 @@ def test_sync_multilspy_javascript_exceljs() -> None: {'range': {'start': {'line': 185, 'character': 15}, 'end': {'line': 185, 'character': 20}}, 'relativePath': path} ] -def test_sync_multilspy_javascript_exceljs_cross_file() -> None: +def test_sync_multilspy_javascript_violentmonkey_cross_file() -> None: """ - Test the working of multilspy with javascript repository - exceljs + Test the working of multilspy with javascript repository - violentmonkey """ code_language = Language.JAVASCRIPT params = { "code_language": code_language, - "repo_url": "https://github.com/exceljs/exceljs/", - "repo_commit": "ac96f9a61e9799c7776bd940f05c4a51d7200209" + "repo_url": "https://github.com/violentmonkey/violentmonkey/", + "repo_commit": "e2930510b4fb5f59848ecafcd533d06fc41d4187" } with create_test_context(params) as context: lsp = SyncLanguageServer.create(context.config, context.logger, context.source_directory) @@ -64,28 +66,36 @@ def test_sync_multilspy_javascript_exceljs_cross_file() -> None: # All the communication with the language server must be performed inside the context manager # The server process is started when the context manager is entered and is terminated when the context manager is exited. with lsp.start_server(): - path = str(PurePath("lib/csv/csv.js")) - result = lsp.request_definition(path, 25, 8) + result = lsp.request_definition("src/common/util.js", 335, 55) + print("Definition", result) assert isinstance(result, list) assert len(result) == 1 item = result[0] - assert item["relativePath"] == "lib/utils/stream-buf.js" + assert item["relativePath"] == "src/common/consts.js" assert item["range"] == { - "start": {"line": 145, "character": 6}, - "end": {"line": 145, "character": 15}, + "start": {"line": 46, "character": 13}, + "end": {"line": 46, "character": 21}, } - result = lsp.request_references(path, 2, 9) + result = lsp.request_references("src/common/consts.js", 46, 13) + print("References", result) assert isinstance(result, list) - assert len(result) == 3 + assert len(result) == 10 for item in result: del item["uri"] del item["absolutePath"] assert result == [ - {'range': {'start': {'line': 190, 'character': 17}, 'end': {'line': 190, 'character': 20}}, 'relativePath': "lib/csv/csv.js"}, - {'range': {'start': {'line': 5, 'character': 6}, 'end': {'line': 5, 'character': 9}}, 'relativePath': "lib/doc/workbook.js"}, - {'range': {'start': {'line': 38, 'character': 36}, 'end': {'line': 38, 'character': 39}}, 'relativePath': "lib/doc/workbook.js"}, + {"range": {"start": {"line": 2, "character": 9}, "end": {"line": 2, "character": 17}}, "relativePath": "src/common/util.js"}, + {"range": {"start": {"line": 335, "character": 51}, "end": {"line": 335, "character": 59}}, "relativePath": "src/common/util.js"}, + {"range": {"start": {"line": 5, "character": 16}, "end": {"line": 5, "character": 24}}, "relativePath": "src/background/sync/base.js"}, + {"range": {"start": {"line": 342, "character": 34}, "end": {"line": 342, "character": 42}}, "relativePath": "src/background/sync/base.js"}, + {"range": {"start": {"line": 4, "character": 36}, "end": {"line": 4, "character": 44}}, "relativePath": "src/background/utils/update.js"}, + {"range": {"start": {"line": 15, "character": 5}, "end": {"line": 15, "character": 13}}, "relativePath": "src/background/utils/update.js"}, + {"range": {"start": {"line": 40, "character": 11}, "end": {"line": 40, "character": 19}}, "relativePath": "src/background/utils/update.js"}, + {"range": {"start": {"line": 123, "character": 48}, "end": {"line": 123, "character": 56}}, "relativePath": "src/background/utils/update.js"}, + {"range": {"start": {"line": 1, "character": 9}, "end": {"line": 1, "character": 17}}, "relativePath": "src/background/utils/storage-fetch.js"}, + {"range": {"start": {"line": 70, "character": 26}, "end": {"line": 70, "character": 34}}, "relativePath": "src/background/utils/storage-fetch.js"} ] \ No newline at end of file From 2d09f3211a36784bad9b9c93b7c29843e168f5d6 Mon Sep 17 00:00:00 2001 From: agoel111 <153257819+agoel111@users.noreply.github.com> Date: Tue, 11 Mar 2025 07:51:38 +0000 Subject: [PATCH 3/4] Cross File Reference Fix --- tests/multilspy/test_sync_multilspy_javascript.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/multilspy/test_sync_multilspy_javascript.py b/tests/multilspy/test_sync_multilspy_javascript.py index ae5c4d7..cec0795 100644 --- a/tests/multilspy/test_sync_multilspy_javascript.py +++ b/tests/multilspy/test_sync_multilspy_javascript.py @@ -1,10 +1,8 @@ """ This file contains tests for running the JavaScript Language Server: typescript-language-server """ -import sys -sys.path.append("/workspaces/multilspy") -sys.path.append("/workspaces/multilspy/src") -from multilspy.language_server import SyncLanguageServer + +from language_server import SyncLanguageServer from multilspy.multilspy_config import Language from tests.test_utils import create_test_context from pathlib import PurePath From ecf9cc1615536bcff606bc89ae73160738bafe46 Mon Sep 17 00:00:00 2001 From: agoel111 <153257819+agoel111@users.noreply.github.com> Date: Tue, 11 Mar 2025 07:52:08 +0000 Subject: [PATCH 4/4] Cross File Reference Fix --- tests/multilspy/test_sync_multilspy_javascript.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/multilspy/test_sync_multilspy_javascript.py b/tests/multilspy/test_sync_multilspy_javascript.py index cec0795..63b4bf3 100644 --- a/tests/multilspy/test_sync_multilspy_javascript.py +++ b/tests/multilspy/test_sync_multilspy_javascript.py @@ -2,7 +2,7 @@ This file contains tests for running the JavaScript Language Server: typescript-language-server """ -from language_server import SyncLanguageServer +from multilspy import SyncLanguageServer from multilspy.multilspy_config import Language from tests.test_utils import create_test_context from pathlib import PurePath