1

잠시 궁금해했습니다. 자동 완성은 어떻게 작동합니까?intellisense 및 autocompletions은 어떻게 작동합니까?

예 : 나는 클래스를 사용하고 나에게 모든 속성과 그 클래스의 메서드를 보여줍니다 ->를 입력 할 때마다 PhpStorm에서 . 또한 자동으로 네임 스페이스를 완성하고 심지어 jQuery와 같은 라이브러리 내부의 함수도 완성합니다.

파일에 일종의 정규식을 실행합니까, 아니면 어떻게 든 구문 분석합니까?

+0

감사합니다. =) – g3mini

+0

안녕 g3mini, 문제가 해결 되었습니까? artspd의 답장이 귀하의 질문에 도움이된다고 생각하시는 경우 답장으로 표시하여 동일하거나 유사한 이슈를 가진 다른 커뮤니티 회원이이 정보를 쉽게 검색하고 확인할 수 있습니다 :) –

+0

당신은 말하지 않습니다 ... 나는 방금 방금 읽은 시간 = = – g3mini

답변

4

PhpStorm 개발자는 여기에 있습니다. 나는 자신의 플러그인을 구현하려는 사람들에게 도움이되는 경우를 대비하여 몇 가지 기본 사항을 살펴보고자한다.

우선 코드는 lexer을 사용하여 토큰으로 분할되어야합니다. 그런 다음 AST (추상 구문 트리)와 PSI (프로그램 구조 인터페이스)는 parser을 사용하여 작성됩니다. PhpStorm은 렉서와 파서의 자체 구현을 가지고 있습니다. 이것은 PSI 트리가 단순한 클래스처럼 보이는 방법입니다.

PSI tree

당신이 편집기에 입력하거나 명시 적으로 완료 액션 (Ctrl 키 + 공간) completion contributors의 숫자가 호출을 호출합니다. 커서 위치를 기반으로 제안 목록을 반환하기위한 것입니다.

필드 참조 내부에서 완료가 호출 된 경우를 생각해 봅시다.

Field reference

PhpStorm는 현재 위치에서 모든 반원들이 제시 될 수 있음을 알고있다. 클래스 참조 (우리의 경우 $class 변수)를 얻고 유형을 결정하기 시작합니다. 클래스에 대한 변수 resolves이 클래스의 FQN (정규화 된 이름) 인 경우

클래스의 메서드와 필드를 얻으려면 해당 PSI 요소가 필요합니다. 특수 색인은 FQN을 적절한 PhpClass 트리 요소에 매핑하는 데 사용됩니다. 인덱스는 프로젝트가 처음 열리고 수정 된 각 파일에 대해 업데이트 될 때 처음 빌드됩니다.

PhpStorm은 PSI 요소 (상위 요소 포함)에서 모든 구성원을 수집 한 다음 해당 특성에서 수집합니다. 현재 컨텍스트 (예 : 액세스 범위) 및 이미 입력 된 이름의 부분 (f)에 따라 필터링됩니다.

Code completion

제안 요소의 이름 등의 유형, 위치와 일치 얼마나 잘으로 분류 된 목록에 표시됩니다. 입력시 목록이 다시 정렬됩니다.

을 입력 할 때 요소를 삽입하려면을 입력하십시오. PhpStorm은 하나 이상의 처리기를 호출합니다. 요소에 코드를 올바르게 삽입하는 방법을 알고 있습니다. 예를 들어 메소드에 괄호를 추가하거나 클래스 참조를 가져올 수 있습니다. 이 경우 메서드에 매개 변수가 없으므로 괄호를 넣고 바로 뒤에 커서를 놓으면 충분합니다. 기본적으로의

Result

.IntelliJ IDEA 플랫폼은 플러그인이 위에서 설명한 각 단계에 대한 구현을 제공 할 수 있음을 언급 할 가치가 있습니다. 따라서 완성은 일부 특정 프레임 워크 또는 언어에 맞게 향상되거나 확장 될 수 있습니다.

+0

감사합니다. 매우 자세히 설명해 주셔서 감사합니다! :디 – g3mini

관련 문제