solidlsp: recognize Arduino .ino files as C++ (#1534)

This commit is contained in:
TiM authored and GitHub committed 2026-06-28 14:48:55 +02:00
1 parent 91a18eb465
commit 83d19905d0
2 files changed
+21

No files matched your search

+7
View File
@@ -361,6 +361,11 @@ class Language(str, Enum):
# OpenCL
".cl",
".clcpp",
# Arduino sketch: not in clang's extension table, but it is C++.
# Routing it here lets clangd serve symbols; the project must
# tell clangd it is C++ (a .clangd with CompileFlags Add: [-xc++],
# or a compile DB), since the clang driver can't infer a job from .ino.
".ino",
case_sensitive=False,
)
case self.CPP_CCLS:
@@ -386,6 +391,8 @@ class Language(str, Enum):
# Objective-C
".m",
".mm",
# Arduino sketch (C++); see note in the CPP case above.
".ino",
case_sensitive=False,
)
case self.KOTLIN:
+14
View File
@@ -24,6 +24,20 @@ if language_tests_enabled(Language.CPP_CCLS):
_cpp_servers.append(Language.CPP_CCLS)
@pytest.mark.parametrize("language", [Language.CPP, Language.CPP_CCLS])
def test_source_fn_matcher_includes_ino(language: Language) -> None:
"""Arduino .ino sketches are C++ and must route to the C++ language server.
This is a pure matcher check; it needs no running language server.
"""
matcher = language.get_source_fn_matcher()
assert matcher.is_relevant_filename("sketch.ino")
assert matcher.is_relevant_filename("BLINK.INO") # case-insensitive
assert matcher.is_relevant_filename("/path/to/s3_camera.ino")
assert matcher.is_relevant_filename("main.cpp") # regression: ordinary C++ still matches
assert not matcher.is_relevant_filename("notes.md")
@pytest.mark.cpp
@pytest.mark.skipif(not _cpp_servers, reason="No C++ language server (clangd or ccls) available")
class TestCppLanguageServer: