2018년 11월 (버전 1.30)
업데이트 1.30.2: 이 업데이트는 다음 이슈를 해결합니다.
업데이트 1.30.1: 이 업데이트는 다음 이슈를 해결합니다.
다운로드: Windows: x64 | Mac: Intel | Linux 64비트: deb rpm tarball | 32비트: deb rpm tarball
Visual Studio Code의 2018년 11월 릴리스에 오신 것을 환영합니다. 이번 버전에는 여러분이 좋아할 만한 몇 가지 중요한 업데이트가 있습니다. 주요 내용은 다음과 같습니다.
- 여러 줄 검색 개선 - 정규식을 사용하지 않고도 쉽게 여러 줄 검색 패턴을 만들 수 있습니다.
- Linux에서 사용자 지정 제목 표시줄 기본 설정 - 이제 Linux에서 사용자 지정 제목 표시줄과 메뉴 표시줄이 기본으로 설정됩니다.
- 참조 보기 - 모든 참조 찾기 보기에는 최근 검색 기록이 포함됩니다.
- 스니펫 주석 변수 - 스니펫 변수는 언어별로 올바른 주석을 삽입합니다.
- JS/TS 콜백 표시 개선 - 이제 익명 콜백의 컨텍스트를 볼 수 있습니다.
- JSDoc Markdown 강조 표시 - JSDoc의 Markdown 코드 블록에 대한 구문 강조 표시를 포함합니다.
- 디버그 구성 간소화 - 초기 시작 구성에 대한 기본값 및 빠른 선택 UI 개선.
- 폴더 열기 시 작업 실행 - 프로젝트 폴더를 처음 열 때 실행할 작업을 구성할 수 있습니다.
- 확장 버전 선택 - 마켓플레이스 확장의 이전 버전을 설치할 수 있습니다.
이 릴리스 노트를 온라인으로 읽으려면 code.visualstudio.com의 업데이트로 이동하십시오.
릴리스 노트는 VS Code의 주요 영역과 관련된 다음 섹션에 배열됩니다. 몇 가지 추가 업데이트입니다.
- 작업대 - 메뉴 스크롤 및 오버플로 처리 개선, 설정을 한 번의 클릭으로 열기.
- 언어 - JS/TS 이름 바꾸기가 이제 구조 분해 할당을 처리하고, 누락된 'new' 빠른 수정을 추가합니다.
- 디버깅 - 디버그 콘솔 삭제, VS Code 프로세스 탐색기에서 직접 디버깅.
- 작업 - 작업 터미널 지우기, 작업 변수에 대한 사용자 입력, 마지막 작업 명령 다시 실행.
- 확장 작성 - 선언으로 이동 지원, 새 시그니처 도움말 컨텍스트.
Insider: 가능한 한 빨리 새로운 기능을 보려면? 야간 빌드인 Insider를 다운로드하고 최신 업데이트를 즉시 사용해 볼 수 있습니다. 최신 Visual Studio Code 뉴스, 업데이트 및 콘텐츠를 보려면 Twitter @code를 팔로우하세요!
워크벤치
여러 줄 검색 입력
지난달, 여러 줄 검색 지원이 추가되었습니다. 이번 달에는 검색 UX를 개선하여 사용 편의성을 높였습니다. 이제 정규식을 작성하지 않고도 여러 줄 텍스트로 검색할 수 있습니다. 검색 상자에 Shift+Enter를 입력하여 줄 바꿈을 삽입하면 검색 상자가 확장되어 전체 여러 줄 쿼리를 표시합니다. 편집기에서 여러 줄 선택한 내용을 복사하여 검색 상자에 붙여넣을 수도 있습니다.

Linux에서 사용자 지정 제목 표시줄 및 메뉴 표시줄 기본 설정
여러 릴리스에 걸쳐 사용자 지정 제목 표시줄 및 메뉴 표시줄을 통해 Windows의 메뉴 접근성과 테마를 개선해 왔습니다. Linux에서는 선택적으로 사용할 수 있었지만, 이번 릴리스부터 기본으로 활성화됩니다.

기본 제목 표시줄을 사용하려면 window.titleBarStyle를 native로 설정하세요.
스크롤 가능한 메뉴
사용자 지정 메뉴 표시줄이 활성화되면 메뉴는 VS Code 창 내에서 렌더링하도록 제한됩니다. 이전에는 메뉴가 창의 경계에 잘릴 수 있었습니다. 이제 필요에 따라 컨텍스트 메뉴를 스크롤할 수 있도록 하여 이 문제가 해결되었습니다.

메뉴 표시줄 오버플로 메뉴
메뉴 표시줄에는 창 너비가 메뉴 표시줄과 창 제목을 모두 표시하기에 충분하지 않을 때 새 오버플로 메뉴(...)도 있습니다.

설정 편집기 작업 이동
설정 편집기 작업(settings.json 열기, 수정된 설정 표시 등)이 설정 편집기 내부의 ... 메뉴에서 편집기 제목 표시줄로 이동했습니다. 이는 다른 편집기 형식과의 일관성을 높이며, 이제 중괄호 {} 버튼으로 settings.json 열기를 한 번의 클릭으로 사용할 수 있습니다. 키 바인딩 편집기도 동일하게 변경되었습니다.

참조 보기
참조 보기가 개선되어 더 이상 미리 보기 기능이 아닙니다. 이제 두 가지 명령이 있습니다.
- 모든 참조 찾기: 참조 보기를 엽니다.
- 참조 미리 보기: 참조를 미리 보기 창에서 엽니다.
참조 보기는 시작 시 숨겨지지만 사용 후에는 계속 표시됩니다. 모든 검색 결과가 지워지면 이전 검색 기록이 표시됩니다.

이제 보기 상단에 결과 요약과 결과를 지우고 복사할 수 있는 컨텍스트 메뉴가 있습니다. 많은 버그가 수정되었고 전반적인 안정성이 향상되었습니다.
편집기
스니펫 주석 변수
현재 언어를 존중하는 줄 또는 블록 주석을 삽입하는 새 스니펫 변수가 있습니다. 블록 주석의 경우 BLOCK_COMMENT_START 및 BLOCK_COMMENT_END를, 그 외에는 LINE_COMMENT를 사용하세요.
아래 스니펫은 JavaScript 파일에서는 /* Hello World */를, HTML 파일에서는 <!-- Hello World -->를 삽입합니다.
{
"hello": {
"scope": "javascript,html",
"prefix": "hello",
"body": "$BLOCK_COMMENT_START Hello World $BLOCK_COMMENT_END"
}
}
선언 대 정의
지금까지 VS Code는 기호의 정의를 표시하는 명령(예: 정의로 이동 및 정의 미리 보기)을 제공했습니다. 이는 일부 언어가 다른 언어보다 기호의 선언과 정의를 엄격하게 구분한다는 사실을 고려하지 않았습니다. 이를 수정하여 이제 기호의 선언을 위한 선언으로 이동 및 선언 미리 보기 명령이 추가되었습니다.

선언으로 이동과 같은 언어 기능에 필요한 데이터는 확장에서 계산되며, 확장 작성 섹션에서 자세한 내용을 확인할 수 있는 새 API가 있습니다.
부드러운 커서 애니메이션
새로운 설정 editor.cursorSmoothCaretAnimation은 커서가 이동할 때마다 전환 애니메이션을 활성화합니다.
Git 통합
기본 클릭 작업 변경
이제 소스 제어 보기에서 파일을 클릭할 때의 기본 동작을 변경할 수 있습니다. 기본적으로 VS Code는 비교 보기를 열지만, git.openDiffOnClick을 false로 설정하면 파일이 일반 편집기에서 열립니다.
커밋 시 푸시 또는 동기화
새로운 설정 git.postCommitCommand를 사용하면 커밋 후 저장소를 푸시하거나 동기화할 수 있습니다. 사용 가능한 값은 none(기본값), push, sync입니다.
언어
TypeScript 3.2
VS Code에 TypeScript 3.2.2가 포함되었습니다. 이번 릴리스에는 bind, call, apply의 엄격한 형식 지정 및 BigInt 지원을 포함한 몇 가지 흥미로운 새 언어 기능이 제공됩니다. TypeScript 업데이트는 중요한 버그도 수정하고 새 도구 기능 및 개선 사항을 포함합니다.
JavaScript 및 TypeScript 콜백 표시 개선
JavaScript 및 TypeScript 익명 콜백은 이전에 개요 보기, 탐색기 보기 및 문서 기호 목록에서 모두 <function>으로 레이블이 지정되었습니다. 이로 인해 실제로 원하는 함수를 식별하기가 불가능했습니다.

TypeScript 3.2 이상에서는 VS Code가 콜백 함수에 대한 더 많은 컨텍스트를 표시하여 구분할 수 있도록 합니다.

이름 바꾸기가 JS/TS 구조 분해를 올바르게 처리
이름 바꾸기가 이제 JavaScript 및 TypeScript 구조 분해를 처리하고 필요한 경우 별칭을 도입합니다.

새로운 JS/TS 빠른 수정 추가
클래스를 인스턴스화할 때 new를 잊으셨나요? TypeScript 3.2는 이를 도와줄 새로운 빠른 수정을 제공합니다.

이 빠른 수정은 TypeScript뿐만 아니라 형식 검사 JavaScript에서도 작동합니다.
JS/TS 경로 제안에 대한 파일 아이콘
VS Code 1.29의 작업을 기반으로, IntelliSense 위젯은 이제 JavaScript 및 TypeScript 경로 제안에 대한 파일 아이콘을 표시합니다.
![]()
JSDoc 주석의 Markdown 요소 강조 표시
JSDoc 블록 내부의 들여쓰기된 코드 블록 및 기타 Markdown 요소에 이제 구문이 강조 표시됩니다.

이 인라인 강조 표시는 호버 및 IntelliSense 문서에 대한 VS Code의 Markdown 렌더링과 더 잘 일치합니다.
디버깅
초기 디버그 구성 간소화
이번 마일스톤에서는 가장 인기 있는 디버그 확장에 대한 생성된 launch.json 파일을 단순화하는 데 중점을 두었습니다. 목표는 사용자가 디버깅을 시작하고 구성하는 것을 더 쉽게 만드는 것이었습니다. 이를 위해 불필요한 시작 구성 특성을 숨기고 빠른 선택 UI를 사용하여 초기 launch.json을 생성하는 동안 사용자 상호 작용을 개선했습니다. 이 작업에 대한 자세한 내용은 이슈 #62851에서 확인할 수 있습니다.
디버그 콘솔 삭제 가능
지난 마일스톤부터 여러 디버그 세션을 디버깅할 때 세션별로 여러 디버그 콘솔이 표시되었습니다. 이제 해당 세션이 더 이상 활성 상태가 아닐 때 해당 디버그 콘솔의 내용을 지워 삭제할 수 있습니다. 디버그 콘솔 수명 주기를 관리하기 위한 명시적인 명령은 추가하지 않았습니다. 현재 접근 방식이 더 직관적이고 사용하기 쉬울 것이라고 생각하기 때문입니다.
디버그 구성을 위한 사용자 입력 변수 개선
launch.json 변수가 사용자 입력을 프롬프트하는 개념을 개선하고 일반화했습니다. 자세한 내용은 작업 섹션에서 확인할 수 있습니다.
프로세스 탐색기에서 디버깅
이제 VS Code 프로세스 탐색기(개발자: 프로세스 탐색기 열기)에서 디버그 컨텍스트 메뉴 작업을 사용하여 Node.js 프로세스 디버깅을 시작할 수 있습니다.
아래는 통합 터미널에서 시작된 Node.js 프로세스에 연결하는 모습입니다.

Node/Chrome 디버깅
smartStep 이제 기본으로 활성화
몇 개의 릴리스 전, smartStep의 동작을 변경하여 더 유용하게 만들었습니다. smartStep을 사용하면 특히 TypeScript의 경우 훨씬 더 나은 디버깅 환경을 얻을 수 있으므로 항상 켜지도록 변경했습니다.
localRoot에 대한 자동 기본값
Node.js 원격 디버깅 시나리오에서 디버그 구성 특성 localRoot는 이제 자동으로 ${workspaceFolder}로 기본 설정되며 remoteRoot만 지정하면 됩니다.
작업
폴더 열기 시 실행
폴더를 열 때 항상 실행하는 작업이 있다면, "runOn" 속성을 구성하여 해당 폴더가 열릴 때 자동으로 실행되도록 구성할 수 있습니다. VS Code 리포지토리에서 새로운 엄격한 null 검사를 위반하는 것을 방지하는 데 유용했습니다. "runOn": "folderOpen"을 추가하면, 작업을 자동으로 실행하도록 허용한 모든 사용자가 엄격한 null 검사 위반 시 마커를 받게 됩니다.
{
"type": "npm",
"script": "strict-null-check-watch",
"label": "TS - Strict Null Checks",
"isBackground": true,
"problemMatcher": {
"base": "$tsc-watch",
"owner": "typescript-strict-null",
"applyTo": "allDocuments"
},
"runOptions": {
"runOn": "folderOpen"
}
}
작업 터미널 지우기
작업을 실행하기 전에 터미널을 지우려면 작업의 presentation 옵션에 "clear": true를 구성할 수 있습니다.
{
"type": "gulp",
"task": "tslint",
"label": "Run tslint",
"presentation": {
"clear": true
}
}
작업 다시 실행
이제 작업: 마지막 작업 다시 실행 명령(workbench.action.tasks.reRunTask)을 사용하여 작업을 다시 실행할 수 있습니다. 기본적으로 다시 실행된 작업은 입력값을 포함한 실행 변수를 다시 평가합니다. 이전에 평가된 변수를 사용하려면 "reevaluateOnRerun" 옵션을 구성하세요.
{
"type": "gulp",
"task": "tslint",
"label": "Run tslint",
"runOptions": {
"reevaluateOnRerun": false
}
}
작업 및 디버그 구성을 위한 사용자 입력 변수 개선
오랫동안 VS Code는 tasks.json 및 launch.json에서 ${variableName} 구문을 통해 변수 대체를 지원했습니다.
launch.json의 경우, 사용자 입력을 묻는 변수(예: 프로세스 선택기 빠른 선택을 여는 ${command:pickNodeProcess})를 사용하는 것도 가능했습니다. 이 기능은 tasks.json에서는 사용할 수 없었고 명령 기반 변수에도 다른 제약이 있었습니다(이슈 #9297, #9544, #30588 참조).
이번 마일스톤에서는 사용자 입력 변수가 일반화되고 개선되어 이제 launch.json **및** tasks.json에서 사용할 수 있습니다. 이 작업은 또한 명령 구문을 tasks.json으로 가져왔습니다.
사용자 입력 변수의 경우, input이라는 새 변수 범주를 도입했으며, 다음과 같은 구문으로 이어집니다: ${input:variableName}. 이 간단한 구문만으로는 사용자에게 의미 있는 UI를 제공하기에 충분하지 않으므로 launch.json 및 tasks.json에 새 inputs 섹션을 도입하여 추가 구성 특성을 지정했습니다.
Angular CLI 예제

지원되는 특성 목록입니다.
id- 이러한 특성이 사용되는 해당 변수 이름입니다.type- 사용자 입력 위젯의 유형입니다. 이번 릴리스에서는promptString(문자열 InputBox용) 및pickString(문자열 빠른 선택용)이 지원됩니다.description- 사용자에게 표시되는 설명 텍스트입니다.default- 사용자가 Enter 키만 누를 경우 사용할 기본값입니다.
첫 번째 예시는 작업 구성(tasks.json)에서 사용자 입력 변수를 사용하는 방법을 보여줍니다.
{
"tasks": [
{
"label": "Echo input",
"type": "shell",
"command": "echo ${input:echoPrompt}"
}
],
"inputs": [
{
"id": "echoPrompt",
"description": "Please enter a value",
"default": "default echo text",
"type": "promptString"
}
]
}
또 다른 예시는 디버그 구성(launch.json)에서 두 옵션 간의 선택을 위한 사용자 입력 변수를 보여줍니다.
{
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}/${input:pickProgram}"
}
],
"inputs": [
{
"id": "pickProgram",
"description": "Select client or server",
"type": "pickString",
"options": ["client.js", "server.js"],
"default": "client.js"
}
]
}
사용자 입력 변수를 기존 명령 기반 변수와 결합하여 확장 기능에서 사용자 입력 변수를 제공할 수 있도록 할 계획입니다.
확장
이전 버전 설치
현재 버전에 문제가 있는 경우 이제 이전 버전의 확장으로 되돌릴 수 있습니다. VS Code는 설치된 확장에 대해 사용 가능한 버전 드롭다운을 표시하는 다른 버전 설치 작업을 제공합니다.

응답 없는 확장 호스트
VS Code는 확장을 별도의 Node.js 프로세스인 확장 호스트에서 실행합니다. 이렇게 하면 확장 코드가 VS Code 자체와 분리되지만, 서로 다른 확장 간에는 분리되지 않습니다. JavaScript의 단일 스레드 특성으로 인해 확장은 의도적으로 또는 의도하지 않게 확장 호스트 스레드를 독점하여 다른 모든 확장을 차단하고 작업이 응답하지 않는 것처럼 보이게 할 수 있습니다.
VS Code는 이제 확장 호스트를 모니터링하며, 응답이 없을 때 VS Code는 확장 호스트 프로파일링을 시작합니다. 응답 없음의 원인으로 식별된 확장 프로그램의 경우, 이슈 제출을 권장하는 최소화된 알림이 표시됩니다.

사용자는 알림이 작기 때문에 상태 표시줄의 종 모양 아이콘을 주시하세요. 확장 작성자는 응답 없음 이슈를 받는 경우, 이 가이드를 검토하여 발생한 내용과 이슈에 첨부된 CPU 프로필을 여는 방법을 확인해 주세요.
미리보기 기능
미리보기 기능은 릴리스 준비가 되지 않았지만 사용할 만큼 기능적입니다. 개발 중인 동안 초기 피드백을 환영합니다.
HTML 사용자 지정 태그/특성 지원
새로운 html.experimental.custom.tags 및 html.experimental.custom.attributes 설정을 통해 VS Code가 시작 시 로드하는 태그 및 특성 목록을 지정할 수 있습니다. HTML 파일을 편집할 때 VS Code는 이러한 태그 및 특성에 대한 자동 완성 및 호버를 제공합니다. 예를 들어, 웹 컴포넌트와 함께 잘 작동합니다.

octref/web-components-examples 리포지토리를 열어 이 기능을 테스트할 수 있습니다. 이 기능은 **미리 보기 상태이며 설정 이름과 JSON 형식은 변경될 수 있습니다**.
피드백이나 기능 요청이 있다면 이슈 #62976에서 계속 논의해 주세요.
확장 프로그램에 대한 네트워크 프록시 지원
모든 확장에 대한 네트워크 프록시 지원을 활성화하기 위한 실험적 설정 Http: Proxy Support가 있습니다. 아직 일부 세부 사항을 작업 중이지만, 사용해 보시고 작동하는지 알려주시길 바랍니다. (참고: 네트워크 프록시 지원을 활성화하면 현재 GitHub Pull-Request 확장 프로그램의 로그인이 깨집니다.)

대부분의 설정에는 override로 설정하는 것이 가장 좋으며, 잘 작동하지 않으면 비교를 위해 on을 시도해 보세요.
확장 프로그램 작성
선언으로 이동
확장이 선언으로 이동 기능을 지원하기 위해 구현할 수 있는 DeclarationProvider 인터페이스를 추가했습니다. 선언 공급자는 기호의 선언인 위치를 반환해야 합니다. 동일한 파일에 대해 여러 공급자가 등록되면 해당 결과는 병합됩니다.
시그니처 도움말 컨텍스트
SignatureHelpProviders는 이제 시그니처 도움말이 트리거된 방법에 대한 정보를 제공하는 context 매개변수를 받습니다. 컨텍스트에는 다음이 포함됩니다.
- 시그니처 도움말이 트리거된 방법 (트리거 문자, 명령 또는 문서 컨텍스트 변경).
- 시그니처 도움말을 트리거한 문자입니다.
- 시그니처 도움말이 이전에 표시되었을 때 트리거되었습니까?
import * as vscode from 'vscode';
export function activate(context: vscode.ExtensionContext) {
vscode.languages.registerSignatureHelpProvider(
'markdown',
new (class implements vscode.SignatureHelpProvider {
provideSignatureHelp(
document: vscode.TextDocument,
position: vscode.Position,
token: vscode.CancellationToken,
context: vscode.SignatureHelpContext
): vscode.ProviderResult<vscode.SignatureHelp> {
// Return fake signature help result
const sigHelp = new vscode.SignatureHelp();
sigHelp.activeParameter = 0;
sigHelp.activeSignature = 0;
sigHelp.signatures = [new vscode.SignatureInformation(getLabel(context))];
return sigHelp;
}
})(),
{
triggerCharacters: ['('],
retriggerCharacters: [',']
}
);
}
function getLabel(context: vscode.SignatureHelpContext): string {
const parts = [];
// How was signature help triggered
switch (context.triggerKind) {
case vscode.SignatureHelpTriggerKind.Invoke:
parts.push('invoke');
break;
case vscode.SignatureHelpTriggerKind.ContentChange:
parts.push('change');
break;
case vscode.SignatureHelpTriggerKind.TriggerCharacter:
parts.push('character');
break;
}
// The character (if any) that caused signature help to be triggered
if (context.triggerCharacter) {
parts.push(context.triggerCharacter);
}
// Was signature help already showing when it was triggered again?
if (context.isRetrigger) {
parts.push('retrigger');
}
return parts.join(' ');
}
또한, SignatureHelpProviders는 이제 별도의 트리거 문자 세트와 재트리거 문자를 사용하여 등록할 수 있습니다. 재트리거 문자는 시그니처 도움말이 이미 표시 중인 경우에만 시그니처 도움말을 트리거합니다.
위의 SignatureHelpProvider가 작동하는 모습입니다.

기여된 TypeScript 서버 플러그인 구성
확장은 이제 VS Code의 내장 TypeScript 확장에서 제공하는 API를 통해 기여된 TypeScript 서버 플러그인으로 구성 데이터를 보낼 수 있습니다.
// In your VS Code extension
export async function activate(context: vscode.ExtensionContext) {
// Get the TS extension
const tsExtension = vscode.extensions.gettsExtension(
'vscode.typescript-language-features'
);
if (!tsExtension) {
return;
}
await tsExtension.activate();
// Get the API from the TS extension
if (!tsExtension.exports || !tsExtension.exports.getAPI) {
return;
}
const api = tsExtension.exports.getAPI(0);
if (!api) {
return;
}
// Configure the 'my-typescript-plugin-id' plugin
api.configurePlugin('my-typescript-plugin-id', {
someValue: process.env['SOME_VALUE']
});
}
TypeScript 서버 플러그인은 onConfigurationChanged 메서드를 통해 구성 데이터를 받습니다.
// In your TypeScript plugin
import * as ts_module from 'typescript/lib/tsserverlibrary';
export = function init({ typescript }: { typescript: typeof ts_module }) {
return {
create(info: ts.server.PluginCreateInfo) {
// Create new language service
},
onConfigurationChanged(config: any) {
// Receive configuration changes sent from VS Code
}
};
};
이 API를 통해 VS Code 확장은 VS Code 설정을 TypeScript 서버 플러그인과 동기화하거나 플러그인의 동작을 동적으로 변경할 수 있습니다. 실제 사용 사례를 보려면 TypeScript TSLint 플러그인 및 lit-html 확장 프로그램을 살펴보세요.
사용자 지정 보기
보기에서 모두 축소 작업을 추가하기 위한 제안된 API가 이제 안정화되었습니다.
트리 항목 설명
이제 TreeItem의 description 속성을 사용하여 트리 항목에 설명을 추가할 수 있습니다. 트리 항목이 리소스에 의해 백업되는 경우, description을 true로 설정하여 VS Code가 리소스에서 설명을 파생하도록 할 수도 있습니다.
/**
* A human readable string which is rendered less prominently.
* When `true`, it is derived from [resourceUri](#_TreeItem.resourceUri), and when `falsy`, it is not shown.
*/
description?: string | boolean;

디버깅 API
더 풍부한 DebugSession
DebugSession API는 이제 작업 영역 폴더와 **해결된** 디버그 구성을 제공합니다. 해결됨은 모든 변수가 대체되었고 플랫폼별 특성 섹션이 일치하는 플랫폼의 경우 "평탄화"되고 일치하지 않는 플랫폼의 경우 제거되었음을 의미합니다.
중단점을 위한 고유 ID
Breakpoint 클래스는 이제 전체 수명 주기 동안 변경되지 않는 고유 ID(id)를 제공합니다.
디버그 어댑터 생성 제어를 위한 API 최종화
이번 마일스톤에서는 디버그 어댑터 생성 제어를 위한 확장 API를 최종화했습니다. 이 API는 특정 디버그 유형에 대해 등록해야 하는 새 DebugAdapterDescriptorFactory를 사용하며, vscode.debug.registerDebugAdapterDescriptorFactory로 등록됩니다. 팩토리에는 VS Code가 디버그 어댑터가 필요할 때마다 호출하는 단일 메서드 createDebugAdapterDescriptor가 있습니다. 디버그 세션이 인수로 전달되고(세션은 이제 작업 영역 폴더와 해결된 구성 모두 제공), 구현은 디버그 어댑터를 생성하거나 연결하는 방법을 VS Code에 설명하는 객체를 반환해야 합니다.
DebugAdapterExecutable설명자는 VS Code가 세션별로 디버그 어댑터를 외부 프로세스로 시작하고 stdin/stdout을 통해 통신하도록 합니다. 옵션 속성 가방은 작업 디렉터리와 환경 변수를 지정할 수 있습니다.DebugAdapterServer는 VS Code가 여러 세션을 처리하는 서버 프로세스에 연결하고 소켓을 통해 통신하도록 합니다.
참고: 이 API의 최종화와 함께, 이전(제안된) API DebugConfigurationProvider.debugAdapterExecutable 및 매우 오래된 명령 기반 접근 방식(기여 포인트 Debuggers, 특성: adapterExecutableCommand)을 더 이상 사용하지 않도록 권장합니다. 다음 릴리스에서 지원을 제거할 계획이므로 해당 API에서 전환해 주세요.
이 스니펫은 이 API를 사용하여 포함된 확장 프로그램에 내장된 디버그 어댑터를 실행하는 방법을 보여줍니다.
let server: Net.Server;
vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
createDebugAdapterDescriptor(session: DebugSession, executable: DebugAdapterExecutable) {
// start server on launch of first debug session
if (!server) {
// start listening on a random port
server = Net.createServer(socket => {
const s = new MockDebugSession();
s.setRunAsServer(true);
s.start(<NodeJS.ReadableStream>socket, socket);
}).listen(0);
}
// make VS Code connect to debug server instead of launching debug adapter
return new DebugAdapterServer(server.address().port);
}
});
디버그 어댑터 추적기 API 최종화
이번 마일스톤에서는 VS Code와 디버거 확장 프로그램 간에 사용되는 디버그 어댑터 프로토콜을 추적하기 위한 확장 API를 최종화했습니다. 이 API는 디버그 유형에 대해 등록해야 하는 새 DebugAdapterTrackerFactory를 사용하며, vscode.debug.registerDebugAdapterTrackerFactory로 등록됩니다. 팩토리에는 VS Code가 디버그 어댑터와 통신을 시작하기 전에 호출되는 단일 메서드 createDebugAdapterTracker가 있습니다. createDebugAdapterDescriptor는 DebugAdapterTracker 구현(또는 추적을 방지하려면 undefined)을 반환해야 합니다.
이 스니펫은 이 API를 사용하여 Node.js 디버거에 대한 디버그 어댑터 프로토콜을 로깅하는 방법을 보여줍니다.
vscode.debug.registerDebugAdapterTrackerFactory('node', {
createDebugAdapterTracker(session: DebugSession) {
return {
onWillReceiveMessage: m => console.log(`> ${JSON.stringify(m, undefined, 2)}`),
onDidSendMessage: m => console.log(`< ${JSON.stringify(m, undefined, 2)}`)
};
}
});
확장이 필요할 때 활성화되도록 하려면 package.json에서 활성화 이벤트 onDebugAdapterProtocolTracker:<debug type>을 사용할 수 있습니다. 디버그 유형이 생략되면 확장 프로그램은 모든 디버그 유형에 대해 활성화됩니다.
{
"activationEvents": ["onDebugAdapterProtocolTracker:node"]
}
디버그 어댑터 프로토콜
runInTerminal 응답에 대한 새 shellProcessId 특성
디버그 어댑터가 터미널에서 대상을 실행해야 하는 경우 DAP runInTerminal 요청을 사용할 수 있습니다. 이 요청은 대상 프로세스의 processId를 선택적으로 반환할 수 있지만, 실제로는 프런트엔드 구현 중 이 정보를 제공할 수 있는 것이 없었습니다. 이러한 이유로 터미널 프로세스의 프로세스 ID(결정하기 훨씬 쉬움)를 반환하기 위한 새 특성 shellProcessId를 도입했습니다.
클립보드
클립보드 API가 최종화되어 이제 모든 확장 프로그램에서 사용할 수 있습니다. 확장에서 OS 클립보드로 문자열을 복사하고 붙여넣을 수 있습니다.
완성 항목
여러 줄에 걸친 완성 항목을 삽입할 때 VS Code는 들여쓰기를 조정합니다. 항상 원하는 것은 아니므로 이 동작을 제어하기 위해 vscode.CompletionItem.keepWhitespace를 추가했습니다.
기호 공급자에 대한 레이블
문서 기호 공급자를 등록할 때 레이블(DocumentSymbolProviderMetadata)을 제공할 수 있습니다. 이 레이블은 문서에 여러 기호 공급자가 있을 때 탐색기 및 개요 보기에 표시됩니다.
제안된 확장 API
각 마일스톤에는 새로운 제안 API가 포함되며 확장 작성자는 이를 시험해 볼 수 있습니다. 언제나처럼 여러분의 피드백을 기다립니다. 제안된 API를 시험해 보려면 다음 단계를 따르세요.
- 제안된 API는 자주 변경되므로 Insiders를 사용해야 합니다.
- 확장의
package.json파일에 이 줄이 있어야 합니다:"enableProposedApi": true. - 최신 버전의 vscode.proposed.d.ts 파일을 프로젝트로 복사하세요.
제안된 API를 사용하는 확장은 게시할 수 없습니다. 다음 릴리스에서 호환되지 않는 변경이 발생할 수 있으며 기존 확장에 문제가 발생하는 것을 원하지 않습니다.
사용자 지정 보기에서 메시지 텍스트 지원
트리 보기 메시지
이제 TreeView의 message 속성을 사용하여 트리 보기에 메시지를 설정할 수 있습니다.
/**
* An optional human-readable message that will be rendered in the view.
*/
message?: string | MarkdownString;

스마트 선택 및 확장
스마트 선택 기능을 지원하기 위해 제안된 API를 추가했습니다. 오늘날 선택 영역 확장 또는 선택 영역 축소 명령을 실행하면 선택 범위는 약한 휴리스틱을 기반으로 계산됩니다. 해당 휴리스틱을 개선하기 위해 노력하는 동안 확장 작성자를 참여시키고 싶습니다. 따라서 SelectionRangeProvider에 대한 제안된 API를 추가했습니다.
엔지니어링
WinJS-Promise 제거
VS Code가 시작될 때 JavaScript는 오늘날과 같지 않았습니다. 예를 들어 기본 Promise가 없었고 당시 팀은 WinJS.Promise를 사용하기로 결정했습니다. 오늘날 상황은 다릅니다. 기본 Promise가 존재하며 WinJS.Promise는 더 이상 사용되지 않습니다.
따라서 WinJS.Promise에서 마이그레이션하는 작업을 진행 중입니다. API와 런타임 동작의 차이 때문에 쉬운 작업이 아닙니다. 약 10000개의 WinJS.Promise 참조에서 시작하여 1471개로 줄었으며, 그 중 약 500개는 단순한 유형 주석이 아닌 인스턴스화입니다. 이 대장정을 곧 완료할 것이라고 확신합니다!
Electron 3.0 탐색 지속
이번 마일스톤 동안 Electron 3.0.0을 VS Code에 번들링하는 작업을 계속 탐색했습니다. 이것은 주요 Electron 릴리스이며 Chrome 66 및 Node.js 10.x(현재 버전인 Chrome 61 및 Node.js 8.x에 비해 큰 도약)와 함께 제공됩니다. 12월에 Insiders 사용자에게 업데이트를 푸시하여 추가 피드백을 수집할 계획입니다. 도움이 되고 싶으시면 VS Code Insiders를 설치하세요.
커뮤니티 이슈 추적
커뮤니티는 오랫동안 주기적으로 이슈 추적을 도와왔습니다. 현재 하루 평균 70개 이상의 이슈가 제출되는 상황에서, 가장 활동적인 커뮤니티 구성원들에게 작업 중인 이슈에 특정 레이블을 추가하도록 초대하기 시작했습니다. GitHub에는 세분화된 권한이 없기 때문에, 특정 댓글을 감지하고 레이블을 추가하는 이슈 봇을 사용하고 있습니다. 아래 감사 섹션에서 감사를 표합니다.
엄격한 null 검사
메인 VS Code 코드베이스에 엄격한 null 검사를 적용하는 작업이 계속되었습니다. 현재 약 800개의 파일을 엄격한 null 검사하고 있으며, 전체 코드베이스가 포함될 때까지 이 작업을 계속할 것입니다.
이 엔지니어링 노력과 프로세스에 대해 자세히 알아보려면 이슈 #60565를 추적하세요.
확장 프로그램에 대한 기여
저희 팀은 여러 VS Code 확장 프로그램을 유지 관리하거나 기여합니다. 이번 달 가장 주목할 만한 내용은 다음과 같습니다.
GitHub 풀 요청
이번 마일스톤에서는 GitHub Pull Requests 확장에 대한 개선 작업을 진행했습니다.
다음은 몇 가지 새로운 기능입니다.
- 로컬 브랜치에서 직접 풀 요청 생성.
- 체크아웃된 풀 요청에 대한 일련의 소스 코드 변경 사항 제안.
- 풀 요청 설명 페이지에서 상태 확인 정보 보기.
확장에 대한 전체 릴리스 노트는 vscode-pull-request-github 릴리스에서 읽을 수 있습니다.
주요 수정 사항
- 37929: 디버그 환경 드롭다운 메뉴 생성 시 디버거 활성화하지 않음
- 60187: Jest 테스트에서 디버거가 중단점을 적중하지 않음
- 61590: 설정 및 키 바인딩 편집기를 편집기 작업 표시에서 일관되게 만들기
- 62370: 편집기에서 진단 호버 개선
- 62500: 명령 팔레트에 "커서까지 실행" 추가
- 62778: 중앙 집중식 레이아웃이 크기를 복원하지 않음
- 63618: Electron 2.0.13 64비트 디버깅 실패, 오류 "런타임 프로세스에 연결할 수 없습니다. 10000ms 후 시간 초과". 그러나 Electron 32비트에서는 성공
감사합니다
마지막으로, VS Code를 더욱 발전시키는 데 도움을 준 다음 분들께 진심으로 감사드립니다.
이슈 추적에 대한 기여
vscode 기여
- Adrien Becchis (@AdrieanKhisbe): 문법 주입 - 더 넓은 범위 고려 PR #50534
- David Bailey (@davidbailey00): URL 핸들러 데스크톱 파일에서 StartupWMClass 제거 PR #63750
- Anuj (@desaianuj): presentation 대신 representation PR #63477
- Donald Pipowitch (@donaldpipowitch): .hintrc 추가 및 .babelrc를 jsonc 문법으로 이동 PR #63759
- Eric Amodio (@eamodio)
- Alexandr Fadeev (@fadeevab): 최신 문법에 따라 makefile 색상 테스트 업데이트 PR #61961
- Guillaume Poussel (@gpoussel): Fix #62278: IPv6 링크 지원 PR #62293
- Aleksandr Filatov (@greybax): 이슈 #46816 수정 PR #60404
- Napoleon Oikonomou (@iamnapo): README가 존재하는 경우 환영 페이지 대신 README 표시 PR #60061
- Raul Humberto Lopez Lopez (@iBlackShadow): 옵션 변경으로 검색이 트리거될 때 검색 기록에 항목 추가 PR #61993
- Andrii Dieiev (@IllusionMH): 검색 결과에서 작업 정렬 제어 옵션 PR #63457
- joan xie (@infinnie): 메뉴 가로 정렬 PR #61454
- Matt Q (@irrationalRock): #34345 수정 - 파일 끝/파일 상단에 여러 커서 추가하는 명령 추가 PR #50312
- Jeffrey (@JeffreyCA)
- @jokurz: ksh 스크립트를 shellscript로 자동 감지 PR #62838
- karan verma (@karanisverma): fix: #55946 주석 스니펫 변수 추가 PR #63572
- Krish De Souza (@Kedstar99): updateService.linux.ts의 checkForSnapUpdate를 수정하여 snap 버전을 올바르게 식별 PR #63716
- Benjamin Lannon (@lannonbr): 확장 프로그램 정보를 클립보드로 출력하는 기능 추가 PR #56514
- Luo Wenqing (@laphets): autoNavigateNextConflict 활성화 시 마지막 병합 충돌 경고 수정 PR #62788
- Matthew Leon (@leonm1): debug 콘솔 copyAll의 빈 줄 수정 #62785 PR #62823
- Bruno Logerfo (@Logerfo): keyboardMapperTestUtils에 대한 엄격한 null 검사 PR #63027
- Mathias Rasmussen (@mathiasvr): 마지막 커밋 취소: 스테이징된 파일 유지 #60002 수정 PR #60104
- Matt Crupi (@mmcru): Linux 저장 오류 메시지에 Sudo 참조 #63295 수정 PR #63394
- Philip Arola (@philiparola): 설정 화면의 'overwrite'를 'override'로 변경 PR #61926
- Samuel Toriel (@riltsken): [수정] #27649 IntelliSense 문서 위젯을 상단에 고정 PR #62115
- Ryan Scott (@rscott): Git:Fetch (prune) 추가 PR #59735
- Prabhanjan S Koushik (@skprabhanjan)
- SlaneR (@slaner): 주석 오타 수정 PR #62117
- Thomas Struller-Baumann (@Thomas-S-B): 불필요한 캐스팅 제거 PR #63947
- Alexander (@usernamehw)
- Konrad Borowski (@xfix): 스냅샷 로더에서의 실수로 인한 fallthrough 수정 PR #62294
- Yisrael Veller (@YisraelV)
vscode-vsce 기여
- Nikolay Kondratyev (@kondratyev-nv): 특정 버전으로 게시 수정 PR #307
vscode-eslint 기여
- AnguloHerrera (@angulito): 파이프라인 개선 PR #569
language-server-protocol 기여
- Jan Keromnes (@jankeromnes): 사소한 개선: 오타, 문법, 표현. PR #579
- Adolfo Ochagavía (@aochagavia): 사양 오타 수정 PR #597
vscode-languageserver-node에 기여
- Remy Suen (@rcjsuen): DefinitionLink을 사용하여 기호에 대한 메타데이터 제공 PR #415
- Guillaume Martres (@smarter): Converter 인터페이스에 asVersionedTextDocumentIdentifier 추가 PR #421
vscode-html-languageservice에 대한 기여
vscode-generator-code에 대한 기여
- Graham Bartley (@grabartley): git 리포지토리를 만들지 않을 때 더 이상 git 관련 파일이 생성되지 않음 PR #141
debug-adapter-protocol에 기여
- Danny Tuppeny (@DanTup): Dart 플러그인 링크 수정 PR #16
vscode-chrome-debug-core 기여
- @digeff: 스토리지 소스에 대한 src 변경 이벤트 보내지 않음 PR #378
- Shennie Yao (@Shenniey)
vscode-chrome-debug 기여
- Shennie Yao (@Shenniey): Chrome 명령줄 스위치에 대한 런타임 인수 원격 분석 추가 PR #749
- Leslie Leigh (@shrinktofit): targetTypes 옵션 수정 PR #760
vscode-azure-account에 대한 기여
- Yujin Hong (@yujhongmicrosoft): Sovereign에 대한 로그인 지원 추가 PR #79
- Zhe Li (@Sneezry): Azure China 로그인 문제 수정 PR #104
- Mateus Amin (@MateusAmin): README에 설정 추가 PR #107
vscode-recipes에 기여
- Damon Jablons (@blackrobot): Python 레시피의 마크다운 서식 정리 PR #172
- Vinícius Salomão (@vizeke): vscode로 PHP 실행 및 디버깅 PR #169
localization 기여
Transifex VS Code 프로젝트 팀에는 거의 1400명의 회원이 있으며, 매달 약 100명의 활성 기여자가 있습니다. 새로운 번역 제공, 번역 투표, 또는 프로세스 개선 제안 등 기여해 주셔서 감사합니다.
다음은 이번 릴리스의 기여자 스냅샷입니다. 프로젝트에 대한 자세한 내용은 기여자 이름 목록을 포함하여 프로젝트 사이트인 https://aka.ms/vscodeloc를 방문하십시오.
- 불가리아어: Любомир Василев.
- 카탈루냐어: Adolfo Jayme-Barrientos, Enric Soler Rastrollo (MaDDoGo), Oriol Torrillas.
- 체코어: Vít Staniček, Ondra Kalousek, Kryštof Černý.
- 덴마크어: Johan Fagerberg.
- 핀란드어: Feetu Nyrhinen, Jussi Palo, Ahto Simakuutio.
- 프랑스어: Antoine Griffard, Thierry DEMAN-BARCELO, Adrien Clerbois.
- 독일어: Carsten Kneip.
- 그리스어: George Xenakis, Christos Koutsiaris, dimipapaioan.
- 힌디어: Anand Chalakkal Jose Mohan, Kiren Paul, Ashwini Gupta, amgusain, Pointless Banter, Shaswat Rungta, Adnan Shaikh, Shashida Nand Jha.
- 헝가리어: Tar Dániel.
- 중국어 간체: feiyun0112 feiyun0112, Tingting Yi, XIANG ZUO, Tony Xia, G.Y. Z, Dave Young, Jessica Zhang, 驰 雷, Liam Kennedy, bh wu, WangCG duoduobear, ziqiang sun, 正元 刘, 越 郑, peng wei, xiong Fu, 吉姆 舒, 瑜 周, 仁松 陈, Jiang LI.
- 중국어 번체: Winnie Lin , Duran Hsieh, Hans Chiu, Alan Liu.
- 인도네시아어: Laurensius Dede Suhardiman, Wildan Mubarok, Joshua Siagian, Rizki A. Wibowo.
- 일본어: Satoshi Kajiura, Shunya Tajima, Yuichi Nukiyama, Yoshihisa Ozaki, dkp sk, Hiroyuki Mori.
- 칸나다어: Sanjay !, Sushmit Patil.
- 말라얄람어: Kiren Paul, Anand Chalakkal Jose Mohan.
- 노르웨이어: Espen Klein Nilsen, Ivar L, Simen Dæhlin, Daniel Bjørnbakk.
- 폴란드어: Artur.
- 포르투갈어 (브라질): Danilo Dantas, Thiago Custodio, Vinicius Ribeiro, Lucas Santos, Gabriel Henrique Oliveira de Mello.
- 루마니아어: Szauka.
- 러시아어: Mikhail Zabaluev, Acupofspirt, Ilya Umnov.
- 싱할라어: Anand Chalakkal Jose Mohan.
- 스페인어: Jorge Serrano Pérez, Alejandro Medina, Alberto Poblacion, Carlos Longarela, Carlos Mendible, Guillermo Callaghan, Alfonso Jesus Flores Alvarado, Andy Gonzalez.
- 타밀어: Vijay Nirmal, Avinash, Jeyanthinath Muthuram, Narayanan Singaram.
- 텔루구어: Raja Tirumala Rao Guna.
- 터키어: Eyüp DALAN, Mustafa Turhan, Türker YILDIRIM.
- 베트남어: Nguyễn Nhật Tân.