2016-09-09 2 views
4

스 니펫이 동적으로 계산 된 완료 또는 스 니펫을 Visual Studio 코드에 삽입 할 수 있습니까?VSCode의 동적 스 니펫 평가

다양한 형식의 날짜 및 시간 문자열을 삽입하기위한 스 니펫이 필요합니다. 예를 들어 date을 입력하면 ISO 형식의 현재 날짜가 자동으로 확장됩니다.

example of dynamic snippet expansion with dates

EventListener 클래스의 on_query_completions 방법을 통해 파이썬 API에서이 작업을 수행하는 숭고한 텍스트의 시설이있다.

def on_query_completions(self, view, prefix, locations): 
    if prefix == 'date': 
    val = datetime.now().strftime('%Y-%m-%d') 
    return [(prefix, prefix, val)] if val else [] 

내가 User Defined Snippets에 대한 설명서를 읽고,하지만 사용자가 채우고있는 한 가지에만 탭 정지 및 변수 미리 정의 된 텍스트를 삽입 할 수 있습니다 것으로 보인다

:이 구현은 매우 간단하다.

스 니펫 API에 의해 노출 된 기능으로는 이것이 가능하지 않은 경우 저수준 플러그인/확장 API를 통해 비슷한 기능을 구현할 수 있습니까?

기존 확장명이 Insert Date and Time 인 것을 알고 있지만 동적 확장 대신 명령 팔레트를 통해 작동합니다.

답변

2

스 니펫에서 스크립트 또는 유사한 것을 실행할 수 없습니다.

대신 Visual Studio 코드의 확장명을 쓸 수 있습니다. 확장 프로그램은 CompletionItemProvider을 구현해야합니다.

provideCompletionItems 메서드는 CompletionItems의 목록을 반환합니다. 해당 filterText 속성은 제안 상자에 표시된 텍스트 (예 : "날짜"또는 "시간")로 설정되며 해당 속성의 insertText 속성은 동적으로 계산 된 값으로 설정됩니다.

마지막으로 registerCompletionItemProvider을 사용하여 완료 공급자를 등록해야합니다.

당신은 절대적으로 당신이 시작하기 전에 확장을 만드는 방법에보고해야 : https://code.visualstudio.com/docs/extensions/example-hello-world

+0

감사합니다, 올바른 방향으로 절 지적이있다. 구현을 위해'CompletionItem'을 사용하는 것은이 유스 케이스의 ST만큼 간단하지 않지만 더 많은 유연성을 제공합니다. –

+2

@ chris-scott, 나는 똑같은 일을하는 방법을 찾고 있었다. (다른 형식의 타임 스탬프와 같은 이유로). 당신이 일하는 것처럼 들리므로 확장 기능을 공유하거나 VS 코드 마켓 플레이스에 두십시오. :) – Dullroar

+1

@Dullroar, 예. 할 계획입니다. dev 모드 밖에는 테스트하지 않았기 때문에 아직 공개하지 않았지만 github에 업로드하여 사용자가 살펴볼 수 있도록합니다. –