From d39967dd678c405e6cc2826539587b02b1ef8121 Mon Sep 17 00:00:00 2001 From: takeokunn Date: Sun, 8 Feb 2026 01:03:04 +0900 Subject: [PATCH] fix(php): add PHP version validation for Phpactor Check that the installed PHP version is >= 8.1 before proceeding with Phpactor setup. Raises RuntimeError with a clear message if the version is too old, and logs a warning if the version string cannot be parsed. Addresses review comment on PR #1002. --- src/solidlsp/language_servers/phpactor.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/solidlsp/language_servers/phpactor.py b/src/solidlsp/language_servers/phpactor.py index 67dc4995..570fc895 100644 --- a/src/solidlsp/language_servers/phpactor.py +++ b/src/solidlsp/language_servers/phpactor.py @@ -5,8 +5,10 @@ Provides PHP specific instantiation of the LanguageServer class using Phpactor. import logging import os import pathlib +import re import shutil import stat +import subprocess from overrides import override @@ -48,6 +50,18 @@ class PhpactorServer(SolidLanguageServer): php_path is not None ), "PHP is not installed or not found in PATH. Phpactor requires PHP 8.1+. Please install PHP and try again." + # Check PHP version (Phpactor requires PHP 8.1+) + result = subprocess.run(["php", "--version"], capture_output=True, text=True, check=False) + php_version_output = result.stdout.strip() + log.info(f"PHP version: {php_version_output}") + version_match = re.search(r"PHP (\d+)\.(\d+)", php_version_output) + if version_match: + major, minor = int(version_match.group(1)), int(version_match.group(2)) + if major < 8 or (major == 8 and minor < 1): + raise RuntimeError(f"PHP {major}.{minor} detected, but Phpactor requires PHP 8.1+. Please upgrade PHP.") + else: + log.warning("Could not parse PHP version from output. Continuing anyway.") + phpactor_phar_path = os.path.join(self._ls_resources_dir, "phpactor.phar") if not os.path.exists(phpactor_phar_path): os.makedirs(self._ls_resources_dir, exist_ok=True)