vscode languageserver node
release
이 저장소에는 다음 npm 모듈에 대한 코드가 포함되어 있습니다.
모든 npm 모듈은 하나의 Azure Pipeline을 사용하여 빌드됩니다. 상태는 다음과 같습니다.
이러한 npm 모듈을 사용하여 VSCode용 언어 서버를 구현하는 방법에 대한 자세한 문서를 보려면 여기를 클릭하세요.
리포지토리를 복제한 후 npm install
실행하여 종속성을 설치하고 npm run symlink
실행하여 이 리포지토리의 패키지를 서로 가리킵니다.
5.5.x
로 업그레이드되었습니다.20.9.0
및 es2022
에 의존합니다. TypeScript의 노드 대상 매핑도 참조하세요.vscode-jsonrpc
, vscode-languageserver-protocol
, vscode-languageclient
및 vscode-languageserver
이제 main
및 typings
속성 대신 exports
속성을 사용합니다. 이를 module
및 moduleResolution
주변의 tsconfig.json 파일에 채택해야 할 수도 있습니다. LSP 라이브러리는 현재 두 값 모두에 node16
사용합니다.CancellationToken
을 추가했습니다. 필수 매개변수를 추가했기 때문에 이는 주요 변경 사항입니다. client . getFeature ( lsclient . FoldingRangeRequest . method ) . getProvider ( document ) ?. provider ;
라이브러리별 변경 사항은 다음과 같습니다.
start
및 stop
방법 정리. 이제 두 메서드 모두 비동기식이므로 Promise를 반환합니다. 이전에 start가 일회용을 반환한 이후 이는 획기적인 변경입니다. 이제 확장 프로그램은 확장 프로그램 메인 파일에 비활성화 기능을 구현하고 비활성화 호출에서 stop
약속을 올바르게 반환해야 합니다. 결과적으로 확장이 이제 start()
호출을 기다릴 수 있으므로 onReady()
가 제거되었습니다. 이와 같은 오래된 코드 const client : LanguageClient = ... ;
client . start ( ) ;
await client . onReady ( ) ;
다음과 같아야 합니다:
const client : LanguageClient = ... ;
await client . start ( ) ;
sendNotification
메소드가 약속을 반환합니다. 기본 전송에 대한 메시지의 실제 쓰기는 비동기이고 예를 들어 클라이언트는 알림이 전송에 전달되었는지 확인할 수 없기 때문에 약속을 반환해야 했습니다. 이는 약속이 유동적일 수 있고 린터에 의해 플래그가 지정될 수 있다는 점에서 획기적인 변경입니다.handleFailedRequest
의 동작이 변경되었습니다. 서버에서 예외가 수신될 때 기본값을 반환하는 대신 이제 메서드는 오류를 다시 발생시킵니다. 이렇게 하면 오류 시 VS Code의 기본 동작이 사용됩니다. 이 메서드는 또한 다음과 같은 방식으로 RequestCancelled
및 ServerCancelled
처리합니다.ServerCancelled
수신하고 클라이언트가 요청을 취소하지 않은 경우 CancellationError를 발생시켜 클라이언트에게 요청을 다시 실행하도록 요청합니다.RequestCancelled
수신하면 일반적으로 클라이언트는 요청을 취소해야 하며 코드는 (3.16 사양의 가장 좋은 해석에 따라) 기본값을 반환해야 합니다. 클라이언트가 취소하지 않은 경우 RequestCancelled
를 ServerCancelled
로 해석합니다.null
)을 반환하여 클라이언트 측에서 요청이 이미 취소된 경우 서버 결과를 삭제합니다. 이전 라이브러리 릴리스에서는 미들웨어가 VS Code에서도 사용되지 않는 결과를 볼 수 있었기 때문에 이는 획기적인 변경 사항입니다. 사용하지 않는 응답 결과를 변환하지 않아 CPU와 메모리를 절약할 수 있도록 변경되었습니다.프로토콜 3.16.0 버전의 변경 사항에 대한 자세한 목록은 3.16 사양의 변경 로그를 참조하세요.
라이브러리별 변경 사항은 다음과 같습니다.
messages
속성의 이름을 registrationType
으로 바꾸고 해당 RegistrationType
반환합니다. 추가로 register
메서드에서 첫 번째 매개변수를 제거합니다.ErrorCodes
정리. LSP 특정 오류 코드가 새로운 네임스페이스 LSPErrorCodes
로 이동되었습니다. jsonrpc
의 네임스페이스 ErrorCodes
JSON RPC 관련 오류 코드용으로 올바르게 예약되어 있지 않습니다. 이는 획기적인 변화입니다. 이 문제를 해결하려면 대신 LSPErrorCodes
사용하세요.vscode-jsonrpc
를 살펴보겠습니다. (a) 가져오기 vscode-jsonrpc
는 공통 코드만 가져오고, (b) 가져오기 vscode-jsonrpcnode
공통 코드와 노드 코드를 가져오고 (c) 가져오기 vscode-jsonrpcbrowser
가져옵니다. vscode-jsonrpcbrowser
공통 및 브라우저 코드를 가져옵니다.vscode-jsonrpc
에서 요청 및 알림을 보낼 때 매개변수 구조를 제어하는 지원이 추가되었습니다. 요청 또는 알림 유형을 생성할 때 또는 sendRequest
또는 sendNotification
함수를 사용하여 유형이 지정되지 않은 요청 또는 알림을 보낼 때 추가 parameterStructures
구조 인수를 사용하여 매개변수 구조를 제어할 수 있습니다. 기본값은 다음을 수행하는 ParameterStructures.auto
입니다.byPosition
사용하세요.byName
사용했습니다. 다른 모든 매개변수에는 byPosition
사용합니다. SelectionRangeRequest
프로토콜이 추가되었습니다.SelectionRange
SelectionRangeRequest
, SelectionRangeParams
, SelectionRangeClientCapabilities
, SelectionRangeServerCapabilities
, SelectionRangeProviderOptions
,vscode-languageserver-textdocument
. 이제 서버는 이 npm 패키지를 사전 요구해야 합니다.new TextDocuments
수행하는 대신 이제 텍스트 문서를 생성하고 업데이트하기 위한 콜백을 제공하기 위해 텍스트 문서 구성을 전달해야 합니다. 다음은 TypeScript 및 JavaScript의 예입니다. import { TextDocuments } from 'vscode-languageserver' ;
import { TextDocument } from 'vscode-languageserver-textdocument' ;
const documents = new TextDocuments ( TextDocument ) ;
const server = require ( "vscode-languageserver" ) ;
const textDocument = require ( "vscode-languageserver-textdocument" ) ;
const documents = new server . TextDocuments ( textDocument . TextDocument ) ;
RenameOptions
따르지 않는 문제 수정FoldingRangeRequestParam
'FoldingRangeParams'로 이름이 변경되었습니다( FoldingRangeRequestParam
이전 버전과의 호환성을 위해 계속 제공됨).package.json
파일의 engines.vscode
에 지정된 예상 클라이언트 버전이 클라이언트가 실행 중인 VS Code 버전과 일치하는지 확인하세요.Color
, ColorInformation
, ColorPresentation
유형으로 이동되었습니다.FoldingRangeRequest
프로토콜이 추가되었습니다.FoldingRange
, FoldingRangeKind
FoldingRangeRequest
, FoldingRangeRequestParam
, FoldingRangeClientCapabilities
, FoldingRangeServerCapabilities
, FoldingRangeProviderOptions
,CompletionItem
의 preselect
속성에 대한 지원 추가진단에 관련 정보에 대한 지원을 추가합니다.
초기화 예외가 삼켜졌습니다.
이름 바꾸기로 인한 오류가 여전히 VSCode에 표시되지 않습니다.
itterProcess.sh는 dist 패키지로 제공되지 않습니다.
textDocument/publishDiagnostics를 가로채는 미들웨어 추가
provideCompletionItem?: ( this : void , document : TextDocument , position : VPosition , token : CancellationToken , next : ProvideCompletionItemsSignature ) => ProviderResult < VCompletionItem [ ] | VCompletionList > ;
이제 추가 인수 context
포함됩니다.
provideCompletionItem?: ( this : void , document : TextDocument , position : VPosition , context : VCompletionContext , token : CancellationToken , next : ProvideCompletionItemsSignature ) => ProviderResult < VCompletionItem [ ] | VCompletionList > ;
vscode-languageserver-protocol
추가되었습니다. 이 모듈은 이제 클라이언트와 서버 간에 공유됩니다.protocol
, client
및 server
npm 모듈에 추가되었습니다. 제안된 프로토콜은 npm 모듈의 안정적인 버전으로 제공되더라도 변경될 수 있습니다.client/registerFeature
메소드에 잘못된 이름을 사용하는 문제를 해결했습니다. client/registerCapability
여야 합니다.WorkspaceEdit
이 3.x 버전의 사양을 준수하고 2.x 버전의 라이브러리와 역호환되도록 만들었습니다.RequestCancelled
오류 코드가 추가되었습니다.Files.uriToFilePath
더 이상 사용되지 않습니다.rootPath
선택 사항으로 만들었습니다.client/registerCapability
및 client/unregisterCapability
사용하여 기능 핸들러를 동적으로 등록 및 등록 취소할 수 있습니다.workspace/executeCommand
통해 명령 실행을 서버에 위임하도록 지원합니다.InsertTextFormat
let client = new LanguageClient ( ... ) ;
client . onReady ( ) . then ( ( ) => {
client . onNotification ( ... ) ;
client . sendRequest ( ... ) ;
) ;
// Old
import { Protocol2Code , ... } from 'vscode-languageclient' ;
Protocol2Code . asTextEdits ( edits ) ;
// New
let client = new LanguageClient ( ... ) ;
client . protocol2CodeConverter . asTextEdits ( edits ) ;
LanguageClient
VS Code 확장에 사용됩니다. VS Code 확장을 TypeScript 2.xx로 업그레이드하는 방법에 대한 자세한 단계는 여기에서 확인할 수 있습니다.SignatureHelp
에서 선택 사항으로 잘못 선언된 activeSignature
및 activeParameter
이제 필수입니다.protocol.ts
파일이 열거형 유형을 사용했습니다. 그러나 프로토콜 자체는 숫자 기반입니다. 구현 언어에 열거형 유형이 있는지에 대한 가정이 없기 때문입니다. 이를 더 명확하게 하기 위해 열거형은 숫자 유형 또는 리터럴 유형 정의로 대체되었습니다. 적절한 범위 확인 없이 이전 열거형에 숫자가 직접 할당된 경우 컴파일 오류가 발생할 수 있습니다.RequestType
또는 NotificationType
새로 만들고 등록 옵션 유형으로 void를 추가하면 됩니다. 클라이언트 측과 서버 측 모두에서 이를 업데이트하는 것을 잊지 마십시오. // Old
export namespace MyRequest {
export const type : RequestType < MyParams , MyResult , void > = { get method ( ) { return 'myRequest' ; } } ;
}
export namespace MyNotification {
export const type : NotificationType < MyParams > = { get method ( ) { return 'myNotification' ; } } ;
}
// New
export namespace MyRequest {
export const type = new RequestType < MyParams , MyResult , void , void > ( 'myRequest' ) ;
}
export namespace MyNotification {
export const type = new NotificationType < MyParams , void > ( 'myNotification' ) ;
}
LanguageClientOptions.errorHandler
참조). 기본 전략은 지난 3분 동안 5번 이상 충돌이 발생하지 않는 한 서버를 다시 시작하는 것입니다.MIT