개방형 언어 서버 프로토콜의 순수 PHP 구현입니다. 모든 IDE에 대해 PHP에 대한 정적 코드 분석을 제공합니다.
뛰어난 Tolerant PHP Parser, phpDocumentor의 DocBlock 반사 및 동시성을 위한 이벤트 루프를 사용합니다.
목차
호버 요청은 선언 라인(언어 php
로 표시됨)과 docblock의 요약을 반환합니다. 매개변수의 경우 @param
태그가 반환됩니다.
쿼리는 기호의 정규화된 이름에 대해 대소문자를 구분하지 않고 일치됩니다.
비표준: 빈 쿼리는 작업 공간에서 발견된 모든 기호를 반환합니다.
PHP 구문 분석 오류는 오류로 보고되고, docblock의 구문 분석 오류는 경고로 보고됩니다. vendor
디렉터리의 오류/경고는 무시됩니다.
완성, 유형 분석 등은 표준 PHP 라이브러리와 공통 확장을 사용합니다.
전역적으로 검색 가능한 정의는 다음과 같습니다.
const
키워드가 있는 상수필요할 때 적시에 정의가 해결됩니다.
use
진술아직 지원되지 않음:
define()
사용한 상수네임스페이스는 정규화된 이름의 일부만 구성하고 하나의 고유한 선언에 매핑되지 않으므로 의도적으로 선언으로 간주되지 않습니다.
현재 작동하는 정의/참조/호버
use
)use
implements
/ extends
후 클래스와 유사instanceof
이 언어 서버는 파일 프로토콜 확장을 구현합니다. 클라이언트가 ClientCapabilities.xfilesProvider
및 ClientCapabilities.xcontentProvider
를 통해 지원을 표현하는 경우 서버는 클라이언트의 요청을 통해 작업공간의 파일과 파일 콘텐츠를 요청하며 파일 시스템에 직접 액세스하지 않습니다. 이를 통해 서버는 컨테이너와 같은 격리된 환경, 원격 작업 공간 또는 file://
과 다른 프로토콜에서 작동할 수 있습니다.
초기화 시 서버는 프로젝트 디렉터리에서 PHP 파일을 반복적으로 검색하고 이를 구문 분석한 다음 모든 정의와 참조를 메모리 내 인덱스에 추가합니다. 소요되는 시간은 프로젝트 규모에 따라 다릅니다. 작성 당시 이 프로젝트에는 종속성 파일 78개 + 1560개 파일이 포함되어 있으며 Surface Pro 3에서 76MB를 구문 분석하고 소비하는 데 97초가 걸립니다. 언어 서버는 인덱싱하는 동안 완벽하게 작동하며 이미 인덱싱된 정의가 있는 요청에 응답할 수 있습니다. 인덱스가 메모리에 보관되므로 후속 요청이 거의 즉각적으로 이루어집니다.
XDebug를 활성화하면 성능에 큰 영향을 미치며 max_nesting_level
설정이 너무 낮으면 서버가 충돌할 수도 있습니다.
이 프로젝트는 프로토콜 통신 및 명령줄 매개변수에 대해 semver를 따릅니다. 예를 들어 LSP의 주요 버전이 증가하면 PHP LS의 주요 버전도 증가합니다. 요청 구현과 같은 새로운 기능으로 인해 새로운 부 버전이 생성됩니다. 다른 모든 것은 패치 릴리스가 될 것입니다. 모든 수업은 내부 수업으로 간주되며 semver의 적용을 받지 않습니다.
권장되는 설치 방법은 Composer를 통한 설치입니다. 간단히 실행
composer require felixfbecker/language-server
최신 안정 릴리스와 모든 종속성을 얻을 수 있습니다.
composer update
실행하면 서버가 최신 버전으로 업데이트됩니다.
언어 서버와 해당 종속성을 설치한 후 표준 PHP 기호에 대한 스텁을 구문 분석하고 빠른 초기화를 위해 인덱스를 저장해야 합니다.
composer run-script --working-dir=vendor/felixfbecker/language-server parse-stubs
다음으로 언어 서버를 시작하세요.
php vendor/felixfbecker/language-server/bin/php-language-server.php
--tcp=host:port
(선택 사항)서버가 STDIN/STDOUT을 사용하는 대신 언어 클라이언트와 통신하기 위해 TCP 연결을 사용하도록 합니다. 서버는 지정된 주소에 연결을 시도합니다. STDIO를 차단하므로 Windows에서 강력히 권장됩니다.
예:
php bin/php-language-server.php --tcp=127.0.0.1:12345
--tcp-server=host:port
(선택 사항)서버가 STDIN/STDOUT을 사용하는 대신 언어 클라이언트와 통신하기 위해 TCP 연결을 사용하도록 합니다. 서버는 연결을 위해 주어진 주소를 수신합니다. PCNTL을 사용할 수 있는 경우 모든 연결에 대해 하위 프로세스를 분기합니다. 그렇지 않은 경우 하나의 연결만 허용하고 연결을 닫은 후에는 다시 설정할 수 없으므로 대신 새 프로세스를 생성합니다.
예:
php bin/php-language-server.php --tcp-server=127.0.0.1:12345
--memory-limit=integer
(선택 사항)언어 서버의 메모리 제한을 설정합니다. memory-limit php.ini 지시문과 동일합니다. 기본값은 4GB입니다(필요한 것보다 훨씬 많습니다).
예:
php bin/php-language-server.php --memory-limit=256M
최소한 PHP 7.0과 Composer가 설치되어 있어야 합니다. 저장소를 복제하고 실행
composer install
종속성을 설치합니다.
다음을 사용하여 테스트를 실행하세요.
composer test
린트
composer lint
이 프로젝트는 PHPStorm의 PHP 스텁을 구문 분석하여 PHP 내장 기능을 지원합니다. Composer 프로세스 후에 필요에 따라 이를 다시 구문 분석하지만 일부 코드 변경(예: 인덱스 또는 구문 분석과 관련된 코드) 후에는 명시적으로 다시 구문 분석해야 할 수도 있습니다.
composer run-script parse-stubs
xDebug로 디버깅하려면 이 설정이 환경 변수로 설정되어 있는지 확인하세요.
PHPLS_ALLOW_XDEBUG=1
이는 XDebug가 활성화된 것을 감지하는 경우 XDebug 없이 다시 시작하지 않도록 Language Server에 지시합니다(XDebug는 성능에 높은 영향을 미칩니다).