문서 선택기
확장은 언어, 파일 형식 및 위치에 따라 문서 선택기로 기능을 필터링할 수 있습니다. 이 항목에서는 문서 선택기, 문서 스킴 및 확장 작성자가 알아야 할 사항에 대해 설명합니다.
디스크에 없는 텍스트 문서
새로 만든 문서와 같이 모든 텍스트 문서가 디스크에 저장되는 것은 아닙니다. 명시적으로 지정하지 않는 한 문서 선택기는 **모든** 문서 유형에 적용됩니다. `DocumentFilter`의 `scheme` 속성을 사용하여 특정 스킴으로 범위를 좁힐 수 있습니다. 예를 들어 디스크에 저장된 TypeScript 파일의 경우 `{ scheme: 'file', language: 'typescript' }`를 사용할 수 있습니다.
문서 선택기
Visual Studio Code 확장 API는 `DocumentSelector` 유형을 통해 IntelliSense와 같은 언어별 기능을 문서 선택기와 결합합니다. 특정 언어에 대한 기능을 좁히는 간단한 메커니즘입니다.
아래 스니펫은 TypeScript 파일에 대한 `HoverProvider`를 등록하며 문서 선택기는 `typescript` 언어 식별자 문자열입니다.
vscode.languages.registerHoverProvider('typescript', {
provideHover(doc: vscode.TextDocument) {
return new vscode.Hover('For *all* TypeScript documents.');
}
});
문서 선택기는 언어 식별자 이상이 될 수 있으며 더 복잡한 선택기는 `DocumentFilter`를 사용하여 `scheme` 및 `pattern` 경로 glob-pattern을 통한 파일 위치를 기준으로 필터링할 수 있습니다.
vscode.languages.registerHoverProvider(
{ pattern: '**/test/**' },
{
provideHover(doc: vscode.TextDocument) {
return new vscode.Hover('For documents inside `test`-folders only');
}
}
);
다음 스니펫은 `scheme` 필터를 사용하고 이를 언어 식별자와 결합합니다. `untitled` 스킴은 아직 디스크에 저장되지 않은 새 파일에 사용됩니다.
vscode.languages.registerHoverProvider(
{ scheme: 'untitled', language: 'typescript' },
{
provideHover(doc: vscode.TextDocument) {
return new vscode.Hover('For new, unsaved TypeScript documents only');
}
}
);
문서 스킴
`scheme`은 종종 간과되지만 중요한 문서 정보입니다. 대부분의 문서는 디스크에 저장되며 확장 작성자는 일반적으로 디스크의 파일과 작업한다고 가정합니다. 예를 들어 간단한 `typescript` 선택기의 경우 **디스크의 TypeScript 파일**을 가정합니다. 그러나 이러한 가정이 너무 느슨한 시나리오가 있으며 `{ scheme: 'file', language: 'typescript' }`와 같은 더 명시적인 선택기를 사용해야 합니다.
이것의 중요성은 디스크에서 파일을 읽거나 쓰는 기능에 의존할 때 나타납니다. 아래 스니펫을 확인하십시오.
// 👎 too lax
vscode.languages.registerHoverProvider('typescript', {
provideHover(doc: vscode.TextDocument) {
const { size } = fs.statSync(doc.uri.fsPath); // ⚠️ what about 'untitled:/Untitled1.ts' or others?
return new vscode.Hover(`Size in bytes is ${size}`);
}
});
위의 hover provider는 디스크의 문서 크기를 표시하려고 하지만 문서가 실제로 디스크에 저장되어 있는지 확인하지 못합니다. 예를 들어 새로 만들어져 아직 저장되지 않았을 수 있습니다. 올바른 방법은 제공자가 디스크의 파일과만 작업할 수 있음을 VS Code에 알리는 것입니다.
// 👍 only works with files on disk
vscode.languages.registerHoverProvider(
{ scheme: 'file', language: 'typescript' },
{
provideHover(doc: vscode.TextDocument) {
const { size } = fs.statSync(doc.uri.fsPath);
return new vscode.Hover(`Size in bytes is ${size}`);
}
}
);
요약
문서는 일반적으로 파일 시스템에 저장되지만 항상 그런 것은 아닙니다. 제목 없는 문서, Git에서 사용하는 캐시된 문서, FTP와 같은 원격 소스의 문서 등이 있습니다. 기능이 디스크 액세스에 의존하는 경우 `file` 스킴을 사용하는 문서 선택기를 사용하십시오.
다음 단계
VS Code 확장성 모델에 대해 자세히 알아보려면 다음 주제를 시도해 보세요.
- 확장 매니페스트 파일 - VS Code package.json 확장 매니페스트 파일 참조
- 기여 지점 - VS Code 기여 지점 참조