2021년 11월 (버전 1.63)
업데이트 1.63.1: 이 업데이트는 다음 보안 문제를 해결합니다.
업데이트 1.63.2: 이 업데이트는 다음 문제를 해결합니다.
다운로드: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
Visual Studio Code의 2021년 11월 릴리스에 오신 것을 환영합니다. 이번 버전에는 여러분이 좋아하실 만한 많은 업데이트가 포함되어 있으며, 주요 변경 사항은 다음과 같습니다.
- 설치 전 테마 미리 보기 - 설치하지 않고 색상 테마를 시험해 보세요.
- 문제 탐색 순서 구성 - 심각도 또는 파일 위치별로 다음 오류 또는 경고로 이동합니다.
- 스크린캐스트 모드에서 명령 이름 표시 - 키보드 단축키와 함께 명령 이름을 표시합니다.
- 노트북 개선 - Markdown 글꼴 크기 조정, 파일 및 URL 연결 지원 개선.
- 숨겨진 유니코드 강조 표시 - 숨겨진 또는 혼동하기 쉬운 유니코드 문자를 강조 표시합니다.
- TypeScript 메서드 완성 - 인터페이스 및 오버라이드 메서드를 빠르게 채웁니다.
- 사전 릴리스 확장 - 확장 기능의 새로운 기능과 수정 사항을 조기에 사용해 보세요.
- 새로운 Java 시작 환경 - VS Code에서 Java를 구성하고 학습하는 데 도움을 줍니다.
- vscode.dev용 추가 확장 - 웹용 VS Code의 최신 추가 기능을 확인하세요.
- SSH 서버에서 컨테이너 작업 - 새로운 원격-SSH 컨테이너에서 다시 열기 명령.
이 릴리스 노트를 온라인으로 읽으려면 code.visualstudio.com의 업데이트로 이동하십시오.
이번 버전의 새로운 기능에 대한 하이라이트를 VS Code 팀의 릴리스 파티에서 시청하세요. 이벤트 녹화본은 YouTube 채널에서 확인할 수 있습니다.
Insider: 새로운 기능을 최대한 빨리 사용해 보고 싶으신가요? 야간 빌드인 Insider 빌드를 다운로드하고 사용 가능한 최신 업데이트를 즉시 사용해 보세요.
워크벤치
설치 전 테마 미리 보기
이제 Marketplace에서 제공되는 테마를 설치하기 전에 미리 볼 수 있습니다. 색상 테마 드롭다운(⌘K ⌘T (Windows, Linux Ctrl+K Ctrl+T))에서 추가 색상 테마 찾아보기를 선택하여 Marketplace 테마 목록을 표시합니다. VS Code UI는 드롭다운을 탐색하는 동안 색상 테마를 미리 봅니다.
테마 항목에서 Enter를 누르면 확장 프로그램이 설치됩니다.
문제 탐색 순서 구성
이제 다음 문제로 이동(⌥F8 (Windows, Linux Alt+F8)) 및 이전 문제로 이동(⇧⌥F8 (Windows, Linux Shift+Alt+F8)) 탐색 순서를 정의할 수 있습니다. 이전 버전에서는 탐색 순서가 심각도를 기준으로 오류, 경고, 나머지 순서로 이동했습니다. 새로운 문제: 정렬 순서(problems.sortOrder) 설정을 사용하면 severity 또는 position별로 문제를 탐색할 수 있습니다. "problems.sortOrder": "position"을 사용하면 5행의 경고가 13행의 오류보다 먼저 표시됩니다.
여러 언어별 편집기 설정
이제 여러 언어에 대해 한 번에 언어별 편집기 설정을 구성할 수 있습니다. 다음 예는 settings.json 파일에서 javascript 및 typescript 언어에 대한 설정을 함께 사용자 지정하는 방법을 보여줍니다.
"[javascript][typescript]": {
"editor.maxTokenizationLineLength": 2500
}
자동 2x2 편집기 그리드
실제 2x2 그리드 편집기 레이아웃은 보기: 그리드 편집기 레이아웃(2x2) 명령을 통해서만 가능했습니다. 이제 편집기를 수동으로 분할하여 2x2 그리드에 도달하면 동일한 레이아웃을 얻을 수 있으며, 그리드가 자동으로 실제 2x2 레이아웃으로 고정됩니다.
목록에서 Escape 키 처리 개선
이제 목록 및 트리에서 Escape 키를 누르면 선택이 단일 요소로 축소된 후 지워집니다.
웹에서 찾기 사용 가능
VS Code가 브라우저에서 실행 중일 때(아래 예시의 github.dev) 웹뷰 내부에서 찾기 컨트롤이 지원됩니다.

현재 브라우저 API의 제한으로 인해 웹에서의 찾기는 데스크톱과 다르게 작동합니다. 예를 들어, 웹에서는 VS Code가 현재 찾기 결과만 강조 표시할 수 있습니다. 데스크톱에서는 모든 결과가 현재 파일에 강조 표시됩니다.
스크린캐스트 모드에서 명령 이름 표시
이제 스크린캐스트 모드에서 키보드 단축키를 통해 명령을 트리거할 때 명령 이름을 선택적으로 표시할 수 있습니다. 이 동작을 구성하려면 스크린캐스트 모드: 키보드 단축키 형식(screencastMode.keyboardShortcutsFormat) 설정을 사용하세요.

사전 릴리스 확장
VS Code는 이제 확장 기능의 사전 릴리스 버전을 지원하므로 설치를 선택하고 확장 기능의 최신 기능을 미리 사용해 볼 수 있습니다. VS Code는 사전 릴리스 버전을 설치하기 위한 확장 프로그램 설치 드롭다운 메뉴에서 추가 사전 릴리스 버전 설치 옵션을 표시합니다.

설치되면 표시기를 통해 확장 기능의 사전 릴리스 버전을 사용하고 있는지 명확하게 알 수 있습니다.

이미 설치한 확장 프로그램의 사전 릴리스 버전이 있는 경우 쉽게 전환할 수 있습니다.

업데이트된 찾기 작업
검색 보기의 찾기 작업은 이제 편집기의 찾기 작업과 동일한 스타일을 사용합니다.
소스 제어
빠른 비교에서 공백 자르기 무시
이제 왼쪽 여백에 표시되는 SCM 빠른 비교 기능이 scm.diffDecorationsIgnoreTrimWhitespace 설정을 사용하여 공백 자르기를 무시하도록 구성할 수 있습니다.
노트북
노트북에서 글꼴 크기 조정
새로운 notebook.markup.fontSize 설정을 통해 노트북 Markdown 콘텐츠의 글꼴 크기를 제어할 수 있습니다. 이 설정의 기본값은 현재 편집기 글꼴 크기의 120%입니다.
Markdown 셀의 구문 강조 표시
VS Code는 이제 Markdown 셀 내의 구분된 코드 블록의 구문 강조 표시를 지원합니다.

노트북의 파일 링크
이제 노트북 내의 Markdown은 현재 작업 영역의 다른 파일에 연결할 수 있습니다.
/로 시작하는 링크는 작업 영역 루트에 상대적으로 확인됩니다. ./로 시작하거나 파일 이름으로만 시작하는 링크는 현재 노트북에 상대적으로 확인됩니다.
노트북의 기본 http(s) 링크
또한 http 또는 https를 포함하는 Markdown 텍스트가 이제 자동으로 링크로 변환됩니다.

이는 JupyterLab과 같은 다른 노트북 렌더러의 동작과 일치합니다.
노트북 도구 모음 레이블의 동적 가시성
노트북 도구 모음은 notebook.globalToolbarShowLabel을 dynamic으로 설정하여 편집기 그룹의 너비에 따라 작업의 레이블을 표시할지 여부를 결정할 수 있습니다. 가장 오른쪽 작업 그룹부터 레이블을 숨긴 다음 왼쪽 그룹의 레이블을 숨깁니다. 모든 레이블이 숨겨진 후에도 편집기 그룹이 여전히 너무 좁으면 작업이 오버플로 메뉴로 이동됩니다.
notebook.globalToolbarShowLabel의 다른 값은 이제 always와 never입니다.
편집기
유니코드 강조 표시
소스 코드의 모든 흔하지 않은 숨겨진 문자는 이제 기본적으로 강조 표시됩니다.

또한 ASCII 문자와 혼동될 수 있는 문자도 강조 표시됩니다.

숨겨지거나 혼동하기 쉬운 유니코드 문자가 유니코드 스푸핑 공격에 사용될 수 있는 방법에 대해 "The Invisible JavaScript Backdoor" 블로그 게시물 또는 이 케임브리지 대학교 기사를 읽을 수 있습니다.
이 기능은 글꼴 및 로캘 설정에 따라 달라지므로 모든 가능한 유니코드 스푸핑 공격을 탐지하지는 못합니다. 또한 모호한 문자의 탐지는 휴리스틱하게 수행됩니다. 안전을 위해 VS Code의 작업 영역 신뢰 제한 모드를 사용하여 소스 코드를 검토해야 합니다. 신뢰할 수 없는 작업 영역에서는 ASCII가 아닌 모든 문자가 강조 표시됩니다.
editor.unicodeHighlight.invisibleCharacters, editor.unicodeHighlight.ambiguousCharacters 또는 editor.unicodeHighlight.nonBasicASCII 설정은 false로 설정하여 해당 기능을 비활성화할 수 있습니다.
개별 문자는 강조 표시에서 제외될 수 있으며, 주석 또는 텍스트의 문자는 다음 설정으로 제어됩니다.
editor.unicodeHighlight.allowedCharacters- 강조 표시하지 않을 특정 문자 목록.editor.unicodeHighlight.includeComments- 주석에서 문자 강조 표시 사용.
또한 Markdown 문서는 기본적으로 강조 표시되지 않습니다.
여러 개의 호버 제공자
문서에 대해 여러 개의 호버 제공자가 있는 경우, 제공자 중 하나가 결과를 반환하는 즉시 호버가 표시되며, 나머지 제공자의 결과가 들어오는 대로 업데이트됩니다.
| 이전 | 이후 |
|---|---|
작업
automationProfile 설정
기존 terminal.integrated.automationShell.* 설정은 더 이상 사용되지 않으며 새로운 terminal.integrated.automationProfile.* 설정이 추가되었습니다. 이를 통해 작업에 사용되는 터미널의 속성(셸, 아이콘, 색상, 셸 인수 포함)을 더 자유롭게 지정할 수 있습니다.
gulpfile.ts 지원
내장된 gulp 확장 프로그램은 이제 gulpfile.ts 파일에서 작업을 감지하는 것을 지원합니다.
NPM 스크립트 보기 개선
NPM 스크립트 보기는 스크립트에 대한 더 많은 세부 정보를 표시합니다.

또한 NPM 스크립트 보기에서 제외할 스크립트를 지정할 수 있는 새로운 설정 npm.scriptExplorerExclude가 있습니다.
언어
TypeScript 4.5
VS Code는 이제 TypeScript 4.5를 제공합니다. 이 업데이트는 도구 개선 및 버그 수정과 함께 다양한 새로운 언어 기능을 제공합니다.
TypeScript 블로그에서 TypeScript 4.5에 대해 자세히 알아볼 수 있습니다. TypeScript 블로그.
메서드 서명 완성
메서드 서명 완성 기능을 사용하면 메서드를 빠르게 오버라이드하고 인터페이스 메서드를 구현할 수 있습니다. 이 기능을 사용하면 클래스 본문 내에서 제안(예: 슈퍼 클래스의 메서드)을 수락할 때 메서드 전체 서명이 삽입됩니다.
TypeScript를 작성하는 경우 제안을 수락하면 서명에 참조된 타입에 대한 모든 필요한 가져오기가 추가됩니다.
이 기능은 작업 영역에 TypeScript 4.5가 필요하며 typescript.suggest.classMemberSnippets.enabled 및 javascript.suggest.classMemberSnippets.enabled를 사용하여 활성화/비활성화할 수 있습니다.
JSX 속성 완성
JavaScript 및 TypeScript에서 JSX 속성을 완성할 때 VS Code는 이제 자동으로 특성 값을 삽입합니다.
이러한 완성의 동작은 javascript.preferences.jsxAttributeCompletionStyle 및 typescript.preferences.jsxAttributeCompletionStyle을 사용하여 구성할 수 있습니다.
가능한 설정 값은 다음과 같습니다.
auto- 유형에 따라 특성 스타일을 추론합니다. 문자열은attr=""을 사용하고 다른 유형은attr={}를 사용합니다.braces- 항상 중괄호를 사용합니다.None- 특성 이름만 완성합니다.
이전 TS 버전에 대한 의미론적 강조 표시 제거
이 업데이트는 작업 영역에서 TypeScript 4.1 이하를 사용할 때 의미론적 강조 표시에 대한 지원을 제거합니다.
TypeScript 4.2는 의미론적 강조 표시에 대한 네이티브 지원을 추가했습니다. 이전 버전에서는 의미론적 강조 표시가 VS Code에서 제공하는 TypeScript 언어 플러그인으로 구현되었습니다. 플러그인을 제거하면 유지 관리 및 배포해야 하는 코드 양이 줄어듭니다.
Markdown 미리 보기 사용자 지정 편집기
이제 다른 이름으로 열기 명령을 사용하여 Markdown 파일을 텍스트가 아닌 Markdown 미리 보기로 표시할 수 있습니다.
Markdown: 미리 보기 열기 명령과 달리 다른 이름으로 열기는 새 편집기 탭을 열지 않고 이미 열려 있는 편집기 탭이 표시되는 방식을 변경합니다. 파일을 기본 텍스트 보기로 다시 전환하려면 다른 이름으로 열기를 다시 사용하세요.
또한 workbench.editorAssociations 설정을 사용하여 모든 Markdown 파일을 미리 보기로 자동으로 열도록 VS Code를 구성할 수 있습니다.
"workbench.editorAssociations": {
"*.md": "vscode.markdown.preview.editor"
}
Markdown 미리 보기 점진적 업데이트
내장 Markdown 미리 보기가 입력 시 더 지능적으로 업데이트됩니다. 업데이트마다 전체 Markdown 미리 보기 문서를 다시 작성하는 대신, 이제 DOM diffing을 사용하여 변경된 미리 보기 문서의 요소만 다시 작성합니다. 이렇게 하면 입력 시 가끔 발생하던 깜박임이 줄어듭니다.
JSON 언어 표시기
JSON 파일을 편집할 때, 내용이 하나 이상의 JSON 스키마에 대해 유효성 검사되었는지 여부를 나타내는 언어 표시기 {}가 이제 표시됩니다. 표시기를 마우스로 가리키면 유효성 검사 상태와 스키마를 여는 링크가 표시됩니다.

JSON 스키마 캐싱
스키마 저장소(json.schemastore.org)의 JSON 스키마가 이제 로컬에 캐시됩니다. 이렇게 하면 네트워크 대역폭을 절약하고 오프라인 작업에 도움이 됩니다.
Emmet 태그 제거 명령 개선
Emmet: 태그 제거 명령은 이제 태그가 줄 자체에 있을 경우 태그와 함께 해당 줄을 제거합니다. 또한 제거할 태그 사이에 빈 줄이 있는 경우에도 남은 줄을 올바르게 다시 들여쓰기합니다.
웹용 VS Code
Azure Repos
이번 마일스톤에서는 Azure DevOps 엔지니어링 팀과 협력하여 Azure Repos의 파일 허브에 새로운 바로 가기 키를 추가했습니다. 파일 허브에서 리포지토리를 탐색할 때 .을 누르면 https://vscode.dev에서 리포지토리를 열 수 있습니다.
Azure Repos 리포지토리에 대한 새로운 진입점도 추가했습니다. 이제 원격 선택기의 원격 리포지토리 열기... 메뉴 항목 아래의 새 Azure Repos에서 리포지토리 열기... 메뉴 항목을 사용하여 https://vscode.dev 내에서 Azure Repos 리포지토리에 연결할 수 있습니다.
또한, URL에 https://vscode.dev를 접두사로 붙여 레거시 Azure DevOps URL 형식(예: https://<org>.visualstudio.com)을 사용하여 vscode.dev에서 Azure Repos 리포지토리를 열 수 있습니다.
원격 메뉴 개선
원격 메뉴에 세 가지 추가 명령이 표시됩니다.
- 원격 작업 영역 닫기 - 작업 영역을 비어 있는 것으로 변경합니다.
- Visual Studio Code 다운로드 - https://vscode.gisul.kr/download로 이동합니다.
- 리포지토리로 이동 - 소스 제어 호스트 웹사이트에서 리포지토리를 엽니다(예: GitHub 리포지토리의 경우 https://github.com).
확장 프로그램 기여
Java
Extension Pack for Java는 이제 VS Code에서 Java를 구성하고 배우는 데 도움이 되는 인앱 시작 환경을 제공합니다. 이 안내서에서는 Java 런타임 및 유용한 프레임워크 설치, 프로젝트 열기 및 디버깅, VS Code 내에서 직접 테스트 실행을 다룹니다.

또한 시작하는 데 도움이 되는 Java 튜토리얼 및 사용자 가이드를 https://vscode.gisul.kr/docs/java에서 확인할 수 있습니다.
Jupyter
성능 개선
Jupyter 커널 시작 시 성능 개선이 이루어졌으며, 특히 Python에 대한 개선이 있었습니다. 이전에 노트북을 열었던 사용자는 커널 시작 시 2배의 속도 향상을 경험할 것입니다. Python 커널 재시작도 더 빨라져야 합니다.
성능 개선을 위해 이루어진 변경 사항에 대한 자세한 내용은 다음 문제를 검토할 수 있습니다.
- 커널 사전 예열을 지원하여 노트북 시작 환경을 개선합니다. (#7903)
- Conda와 같은 Python 환경의 더 빠른 활성화. (#8342)
- Jupyter 시작 시 기본 커널 시작 방지. (#8185)
- IPyKernel을 찾았을 때 불필요하게 다시 검색하는 것 방지. (#8196)
- 커널 시작에
Jupyter런타임이 필요하지 않을 때Jupyter패키지를 불필요하게 검색하는 것 방지. (#8350, #8352)
커널 실패 처리 개선
Python 패키지를 설치할 때 !pip install 사용에 대한 경고와 함께 진단 메시지와 빠른 수정 기능이 추가되었습니다. 빠른 수정은 사용자가 올바른 명령 %pip install을 선택하도록 도와줍니다.
커널이 실행 중에 시작되거나 중지되지 못했을 때 더 좋고 의미 있는 오류 메시지를 제공하기 위해 여러 가지 개선이 이루어졌습니다. 오류는 이제 셀 출력에 표시되며 문제를 해결하는 방법에 대한 지침도 제공됩니다. 이렇게 하면 사용자가 VS Code 오른쪽 하단에 표시되는 오류를 놓치더라도 문제를 인식하고 해결할 수 있습니다.
Python
신뢰할 수 없는 작업 영역 및 가상 작업 영역에 대한 제한된 지원
Python 확장은 이제 신뢰할 수 없는 작업 영역(참조: 작업 영역 신뢰) 또는 가상 파일 시스템(예: 원격 GitHub 리포지토리가 열린 경우)에 대한 제한된 지원을 제공합니다. 이러한 경우 부분적인 IntelliSense만 제공되며 확장 프로그램의 다른 기능은 사용할 수 없습니다.
- 호버, 동일한 파일 완성, print와 같은 내장 항목에 대한 완성은 사용할 수 있지만, 확장은 현재 열려 있는 파일만 작동하도록 제한됩니다.
- 신뢰할 수 없는 작업 영역의 경우 Pylance 언어 서버만 지원됩니다.
- 가상 작업 영역의 경우 Jedi와 Pylance만 지원됩니다.
상태 표시줄의 언어 항목이 이러한 상황을 나타내도록 업데이트되었습니다.

모듈 이름 바꾸기 리팩토링
이제 Python 및 Pylance 확장을 사용하여 모듈 이름을 더 쉽게 바꿀 수 있습니다. Python 모듈의 이름을 바꾸면 코드 전체에서 모든 가져오기 및 참조를 변경할지 묻는 메시지가 표시됩니다. 확실하지 않은 경우 변경 사항이 어떻게 보일지 미리 본 다음 결정할 수 있습니다. 확신이 서면 리팩토링 적용을 선택하거나 제안된 변경 사항을 적용하지 않으려면 리팩토링 삭제를 선택할 수 있습니다.
원격 개발
컨테이너, 원격 머신 또는 Linux용 Windows 하위 시스템(WSL)을 전체 기능 개발 환경으로 사용할 수 있는 원격 개발 확장에 대한 작업이 계속 진행 중입니다.
1.63의 주요 기능은 다음과 같습니다.
- SSH 서버에서 작업할 때 컨테이너에서 다시 열기 명령을 사용하여 컨테이너에서 폴더를 열 수 있습니다.
- 개선된 전달 포트 보안으로 안전하지 않은 포트를 방지합니다.
- 구성 가능한 WSL 연결 방법을 사용하면
wsl.exe또는 소켓 연결을 사용하여 서버와 통신할 수 있습니다. - 고급 컨테이너 구성 동영상: 프로젝트의 기본 위치 변경 및 Windows 성능 개선 방법에 대한 동영상.
원격 개발 릴리스 노트에서 새로운 확장 기능 및 버그 수정에 대해 알아볼 수 있습니다. 원격 개발 릴리스 노트.
GitHub Pull Requests 및 Issues
작업, 풀 요청 및 이슈를 생성하고 관리할 수 있는 GitHub Pull Requests and Issues 확장에 대한 작업이 계속 진행 중입니다. 확장 프로그램 0.34.0 릴리스의 변경 로그를 확인하여 주요 내용을 살펴보세요.
확장 프로그램 작성
API 제안 구조 업데이트
API 제안 관리 방식을 변경했습니다. 이전에는 모든 제안이 포함된 단일 파일 vscode.proposed.d.ts가 있었습니다. 이 파일은 점점 커졌고 확장 프로그램이 어떤 제안을 사용하고 있는지, 특정 제안이 이미 안정적인 API에 포함되었는지 알기 어려웠습니다. 이제 제안별로 파일이 있습니다.
예를 들어,
vscode.proposed.languageStatus.d.ts- 언어 상태 항목 제안.vscode.proposed.tabs.d.ts- 편집기 탭 및 탭 그룹 제안 API.
각 제안에는 고유한 이름이 있으며 제안된 API를 사용하려는 확장은 package.json에 해당 이름을 나열해야 합니다. package.json의 enableProposedApi 속성은 이제 제안 이름의 문자열 배열이며 IntelliSense 및 유효성 검사 지원이 포함된 새로운 enabledApiProposals로 대체되었습니다.

API 제안에 대한 업데이트된 흐름은 다음과 같습니다.
- 사용하려는 제안을 찾고 해당 이름을
package.json#enabledApiProposals에 추가합니다. - 최신 vscode-dts를 사용하고
vscode-dts dev를 실행하세요. 그러면 해당d.ts파일이 작업 영역으로 다운로드됩니다. - 이제 제안에 대한 프로그래밍을 할 수 있습니다.
상세한 마이그레이션 가이드 및 샘플 마이그레이션은 이슈 #136964에서 확인할 수 있습니다. 또한 제안된 API 사용에 대한 제한 사항은 변경되지 않았습니다. 제안된 API를 사용하는 확장은 게시할 수 없으며 그대로 사용할 수 없습니다.
빠른 선택 API 개선
이번 반복에서는 VS Code의 QuickPick에 대한 몇 가지 API를 마무리하고 있습니다.
QuickPick 항목의 인라인 버튼
풍부한 입력 환경을 제공하는 것은 확장 API의 목표이며, VS Code의 Quick Pick에 대한 익숙함을 사용하면 강력하면서도 간단한 UI 흐름을 만들 수 있습니다. 한 가지 추가된 사항은 확장이 이제 개별 QuickPickItem에 버튼을 추가할 수 있다는 것입니다.

버튼을 클릭하면 QuickPick 개체에 있는 onDidTriggerItemButton 이벤트가 트리거됩니다. 확장 프로그램에서 이러한 버튼을 사용하는 방식을 기대합니다.
항목 업데이트 시 스크롤 위치 유지 기능
QuickPickItem에 버튼을 추가하는 기능과 더불어 항목을 업데이트할 때 스크롤 위치를 유지하고 싶을 수도 있습니다. 이는 다음과 같은 경우에 흔히 발생하는 확장 프로그램의 사용 사례입니다.
- "이 항목을 목록에서 제거"(예: Ctrl/Cmd + P
xQuickPickItemButton)를 구현합니다. - "이 항목을 어떤 방식으로든 전환"(예: "스니펫 삽입" 명령)을 구현합니다.
- Quick Pick에서 비동기적으로 항목을 로드합니다.
window.createQuickPick()에서 반환되는 QuickPick 개체의 keepScrollPosition 속성을 사용하면 Quick Pick의 스크롤 위치(cursorTop)가 목록 맨 위로 이동하는지 여부를 제어할 수 있습니다.
인증 API 개선
이번 반복에서는 VS Code의 인증과 관련된 몇 가지 API를 마무리하고 있습니다.
새 세션 생성 강제
때때로 authentication.getSession()을 사용하여 세션을 얻을 때, 일부 리소스에는 유효하지만 다른 리소스에는 유효하지 않을 수 있으며, 로그인 흐름을 다시 거치면 이 상황을 해결할 수 있습니다.
한 가지 예는 GitHub Single Sign On의 SAML(Security Assertion Markup Language) 지원입니다. 기본적으로 repo 범위로 생성된 토큰은 자신의 개인 리포지토리에 액세스할 수 있습니다. 그러나 GitHub SSO가 활성화된 조직에 속해 있다면, 해당 조직의 리포지토리에 액세스할 수 있는 권한을 세션에 명시적으로 부여해야 합니다.
이 예에서 GitHub 인증 제공자는 SAML이 적용된 토큰과 액세스하려는 항목 간의 차이를 알지 못할 것이므로, 이 동작을 수정하기 위해 이제 새 세션 생성을 강제할 수 있습니다.
AuthenticationGetSessionOptions에 사용자가 다시 로그인하도록 요청할 수 있는 forceNewSession 속성이 이제 포함되었습니다. 이 값을 true로 설정하면 사용자에게 다음이 표시됩니다.

사용자에게 더 설명적인 메시지를 표시하고 싶다면 detail 문자열이 있는 객체를 지정할 수도 있습니다.
확장이 세션을 가지고 있다면 자동으로 검색
확장 프로그램이 활성화될 때 인증 세션이 있는지 확인하는 것이 일반적인 패턴입니다. 있다면 데이터를 미리 로드하고 나중에 성능을 향상시키기 위해 다른 작업을 수행하는 데 사용합니다. 이것의 단점은 사용자가 해당 확장 프로그램에 인증 세션에 대한 액세스 권한을 부여하지 않은 경우 계정 메뉴에 배지가 표시되고 메뉴 항목에 로그인하라는 메시지가 추가된다는 것이었습니다.
어떤 경우에는 괜찮지만, 다른 경우에는 바람직하지 않고 사용자에게 화면을 복잡하게 만듭니다. 이를 돕기 위해 AuthenticationGetSessionOptions에 silent이라는 새 속성이 있습니다. 이 속성을 사용하면 확장 프로그램이 요청했다는 표시 없이 세션을 요청할 수 있습니다. 그렇게 하면 확장 프로그램이 세션을 얻을 수 있는 능력이 있다면 원하는 작업을 수행할 수 있지만, 그렇지 않다면 사용자에게 번거롭게 하지 않습니다.
참고: 이 API는 확장 프로그램이 이전에 세션에 대한 액세스 권한을 부여받은 경우에만 인증된 세션을 반환합니다(즉, "신뢰할 수 있는 확장 프로그램"입니다). 사용자가 동의하지 않은 세션은 확장 프로그램에 절대 부여되지 않습니다.
설정 편집기 개선
정렬된 설정
개별 설정은 이제 order 필드를 사용하여 정렬할 수 있습니다. 정렬된 설정은 항상 동일한 범주 내에서 정렬되지 않은 설정보다 먼저 오며, 정렬은 상대적입니다.
그룹화되지 않은 범주 지원
설정은 특정 범주 대신 기본 확장 프로그램 헤더 아래에 그룹화될 수도 있습니다. 이렇게 하려면 범주 중 하나의 범주 제목을 확장 프로그램 표시 이름과 동일하게 설정합니다.
아래 예에서 Conf > 언어: 크기 표시 설정이 구성 샘플 헤더 바로 아래에 있음을 확인하세요.

숫자 및 정수 개체 지원
null이 아닌 숫자/정수 값을 가진 개체는 이제 설정 편집기에서 지원됩니다.

executeCommand에 대한 새 유형 서명
이전 VS Code 버전에서는 vscode.commands.executeCommand가 잠재적으로 정의되지 않은 값의 프로미스를 항상 반환하도록 형식화되었습니다.
export function executeCommand<T>(command: string, ...rest: any[]): Thenable<T | undefined>;
그러나 모든 명령이 undefined를 반환하는 것은 아닙니다. 예를 들어, 항목 배열을 반환하는 명령은 결과가 없으면 undefined 대신 빈 배열을 반환하는 경우가 많습니다. 이러한 경우 유형이 올바른 코드를 작성하려면 성가신 캐스팅을 사용하거나 불필요한 검사를 추가해야 했습니다.
이 문제를 해결하기 위해 executeCommand의 타이핑을 더 명확하게 업데이트했습니다.
export function executeCommand<T = unknown>(command: string, ...rest: any[]): Thenable<T>;
이는 명령이 undefined를 반환할 수 있는 경우 유형 매개변수의 일부로 | undefined를 명시적으로 전달해야 함을 의미합니다.
vscode.commands.executeCommand<vscode.CallHierarchyItem | undefined>('vscode.prepareCallHierarchy', ...);
이 변경은 executeCommand의 타이핑에만 영향을 미치며 이 함수의 동작은 변경하지 않습니다.
exactOptionalPropertyTypes에 대한 vscode.d.ts 업데이트
TypeScript의 exactOptionalPropertyTypes 엄격성 옵션을 더 잘 지원하도록 vscode.d.ts의 타이핑을 업데이트했습니다. 이 작업에는 다음이 포함되었습니다.
undefined에 할당될 수 있는 선택적 속성 명확화.?와| undefined의 사용 방식을 더 일관성 있게 적용.
확장에서 exactOptionalPropertyTypes를 사용하는 경우 vscode.d.ts 타이핑에 문제가 발생하는 경우 알려주시기 바랍니다.
URI에서 HTML 사용자 지정 데이터
사용자 지정 데이터를 통해 사용자와 확장은 새로운 HTML 태그 및 특성으로 HTML 언어 지원을 확장할 수 있습니다.
이번 릴리스에서는 HTML 사용자 지정 데이터 기여도 문서 URI도 허용합니다. 이를 사용하여 TextDocumentContentProvider의 문서에서 런타임에 사용자 지정 데이터를 제공할 수 있습니다.
구성 기본값 재정의
이제 package.json의 configurationDefaults 기여 지점을 통해 다른 등록된 구성의 기본값을 재정의할 수 있습니다. 예를 들어, 다음 스니펫은 files.autoSave 설정의 기본 동작을 포커스 변경 시 자동 저장 파일로 재정의합니다.
"configurationDefaults": {
"files.autoSave": "onFocusChange"
}
참고: application 또는 machine 범위의 구성은 재정의할 수 없습니다.
출력 채널에서 내용 바꾸기
이번 마일스톤에서는 OutputChannel 객체의 새로운 replace API를 사용하여 출력 채널의 내용을 바꿀 수 있습니다.
/**
* Replaces all output from the channel with the given value.
*
* @param value A string, falsy values will not be printed.
*/
replace(value: string): void;
workspaceContains의 타임아웃
glob 패턴과 함께 workspaceContains: 활성화 이벤트를 사용할 때 VS Code는 작업 영역에서 파일 이름 검색을 시작하여 제공된 glob 패턴과 일치하는 파일 이름을 찾습니다. 일치하는 파일 이름이 발견되는 즉시 확장이 활성화됩니다. 7초 내에 일치하는 파일 이름이 발견되지 않으면 VS Code는 검색을 취소하고 확장은 활성화되지 않습니다.
사전 릴리스 확장 게시
VS Code는 이제 vsce를 사용하여 --pre-release 플래그를 전달하여 작성자가 확장 프로그램의 사전 릴리스를 게시하는 것을 지원합니다. 즉, 사용자가 사전 릴리스를 설치하도록 선택한 경우 최신 기능을 사용할 수 있으며 공식 확장 프로그램 릴리스 전에 조기 피드백을 받을 수 있습니다.
vsce publish --pre-release
VS Code Marketplace는 확장 버전의 major.minor.patch만 지원하며 아직 semver 사전 릴리스 태그를 지원하지 않습니다. 따라서 확장은 릴리스 버전에 major.EVEN_NUMBER.patch를, 사전 릴리스 버전에 major.ODD_NUMBER.patch를 사용하는 것이 좋습니다. 예를 들어 릴리스의 경우 0.2.*, 사전 릴리스의 경우 0.3.*입니다. VS Code는 가장 높은 버전의 확장을 자동으로 업데이트하므로 사용자가 사전 릴리스 버전을 선택했더라도, 더 높은 버전의 확장이 릴리스되면 해당 사용자는 릴리스된 버전으로 업데이트됩니다.
사전 릴리스 확장에 대한 자세한 내용은 사전 릴리스 확장 주제에서 확인할 수 있습니다.
언어 서버 프로토콜
Language Server Protocol의 새 버전과 해당 npm 모듈이 게시되었습니다. 다양한 사소한 개선 사항 외에도 새 버전에는 인라인 값에 대한 제안 구현이 포함되어 있습니다.
디버그 어댑터 프로토콜
출력 이벤트에 대한 새 중요 카테고리
디버그 어댑터 프로토콜의 Output 이벤트는 디버깅 대상의 stdout 및 stderr 스트림과 디버거의 정보 메시지를 디버그 콘솔로 보내는 데 사용됩니다. 이 메시지 스트림은 사용자가 처리하기에 부담스러울 수 있으며 중요한 내용이 간과될 수 있습니다. 이러한 이유로 Output 이벤트에 important라는 새 카테고리가 추가되었으며, 디버그 어댑터는 사용자가 간과하지 않고 눈에 띄게 표시해야 하는 중요한 메시지를 표시하는 데 사용할 수 있습니다. important 카테고리는 클라이언트가 팝업 알림과 같이 중요한 정보를 눈에 잘 띄는 UI로 표시하는 데 대한 힌트입니다. 이 카테고리는 힌트이므로 클라이언트는 힌트를 무시하고 default 카테고리(console)를 가정할 수 있습니다.
실행 제어 요청에 대한 명확화 및 개선 사항
이전에 디버그 어댑터 프로토콜은 모든 "실행 제어" 요청(continue, next, stepIn, stepOut, stepBack, reverseContinue)이 단일 스레드에서 작동하지만 구현은 스레드 인수를 무시하고 모든 스레드에서 작동할 수 있다고 명시했습니다. 이 모호한 "단일 스레드" 의미는 실제로 유용하지 않기 때문에 일반적으로 디버그 어댑터는 더 유용한 것을 구현합니다.
- 다른 스레드를 다시 시작하여 자유롭게 실행하도록 허용하면서 현재 스레드를 단계별로 실행하는 "step" 요청입니다.
- 모든 스레드를 다시 시작하는 "continue" 요청입니다.
현재 사양은 실행 제어 요청에 비실용적이므로, 일반적으로 구현되는 내용과 일치하도록 모든 실행 제어 요청(continue, next, stepIn, stepOut, stepBack, reverseContinue)에 대한 사양을 변경했습니다.
또한 일부 디버그 어댑터는 step 또는 continue가 현재 스레드에만 작동하지만 다른 모든 스레드는 중단된 상태로 유지하는 "대체 의미"가 필요합니다. 이 "대체 동작"을 위해 모든 실행 제어 요청에 새로운 선택적 singleThread 속성이 추가되었습니다. 해당되는 새 기능 supportsSingleThreadExecutionRequests는 디버그 어댑터가 클라이언트에 실행 제어 요청이 singleThread 속성을 지원함을 나타내는 데 사용해야 합니다.
제안된 확장 API
모든 마일스톤에는 새로운 제안 API가 제공되며 확장 저자는 이를 시험해 볼 수 있습니다. 항상 그렇듯이 피드백을 원합니다. 제안 API를 시험해 보는 단계는 다음과 같습니다.
- 시험하고 싶은 제안을 찾아
package.json#enabledApiProposals에 해당 이름을 추가하세요. - 최신 vscode-dts를 사용하고
vscode-dts dev를 실행하세요. 그러면 해당d.ts파일이 작업 영역으로 다운로드됩니다. - 이제 제안에 대한 프로그래밍을 할 수 있습니다.
제안 API를 사용하는 확장은 게시할 수 없습니다. 다음 릴리스에서 호환성이 깨지는 변경 사항이 있을 수 있으며, 기존 확장을 깨뜨리는 일은 절대 없을 것입니다.
QuickPickItem 구분선
이번 반복에서는 제안된 API(vscode.proposed.quickPickSeparators.d.ts)를 통해 확장이 Quick Pick에 구분선("범주"라고도 함)을 추가할 수 있는 기능을 도입합니다. 이는 항목을 그룹화하거나 항목 사이에 약간의 공간을 두는 데 유용합니다.

기존 Quick Pick에 구분선을 추가하려면 새 QuickPickItem을 기존 항목 목록에 추가하지만 QuickPickItem의 kind 속성을 지정하고 QuickPickItemKind.Separator로 설정하면 됩니다.
위 예시에서 다음과 같은 객체를 항목 목록에 추가해야 합니다.
{
label: 'APIs',
kind: QuickPickItemKind.Separator
}
kind 속성을 지정하지 않거나 QuickPickItemKind.Default로 설정하면 해당 항목은 일반 QuickPickItem으로 처리됩니다.
이 API에 대한 피드백은 이슈 #74967에서 제공할 수 있습니다.
주요 수정 사항
- 5989 openssh를 사용하여 원격 Windows 컴퓨터에서 작업을 실행할 수 없음
- 45629 Mac의 Google 일본어 입력(IME) - 제안이 텍스트와 겹침
- 131345
\n을 사용한 기본 설정의 사용 중단 경고가 JSON을 망가뜨림 - 133521 이미 설치되어 있는 nvm 설치를 요청함
- 133623 초점이 맞춰진 스레드가 더 이상 존재하지 않으면 디버그 도구 모음이 업데이트되지 않음
- 134254 한국어를 입력할 수 없습니다. 자체 분할 또는 누락
- 134429 Zlib 오류: 잘못된 거리 너무 뒤에 있음
- 135838 이름이 더 긴 다른 파일이 있을 때 파일을 저장할 수 없습니다.
- 136684 호출 스택 항목이 올바른 내용의 탭을 열지 않음
- 137012 VS Code 1.62.2(Universal)의 js/jsx 파일에서 Emmet가 작동하지 않음
- 138153 Perf: _removePropertiesWithPossibleUserInfo가 렌더러 로딩 비용의 약 10%를 차지함
- 138302 Perf: 확장 프로그램이 등록된 후에만 편집기 구성 업데이트
- 138517 vscode.dev에서 비공개 저장소의 브랜치를 전환할 수 없음
감사합니다
마지막으로, VS Code 기여자에 대한 진심 어린 감사의 말씀을 전합니다.
웹 확장
웹 확장 프로그램으로 코드를 실행하는 확장을 활성화한 확장 작성자(아래 목록은 11월 2일부터 12월 6일까지)
- Material Icon Theme (lit fork) (abschill)
- Base64 Utils (Adrientoub)
- LS-Club (AdvantiSS)
- Apollo Workbench (Apollo GraphQL)
- A-SOUL 鼓励师 (AS042971)
- Django (Baptiste Darthenay)
- TOML Language Support (be5invis)
- Simple React Snippets (Burke Holland)
- MASM/TASM (clcxsrolau)
- Tree (CTC)
- Tree (Insiders) (CTC)
- Structured Data Templates (Daniel G. Taylor)
- Notepad Notebook (Devon7925)
- Of course I still log you (Diego Perez)
- Hello, DotNetJS! (Elringus)
- Excel Viewer (GrapeCity)
- FTL XML (hahn-kev)
- ECL Language (HPCC Systems)
- Graphviz Previewer Web (IJMacD)
- ImJoy (ImJoy Team)
- InterSystems ObjectScript (InterSystems Developer Community)
- Shader Toy (Web) (Jackson Kearl)
- Dark Light (Jakka Prihatna)
- React Native Mockups Explorer (jamsch)
- Quote List (jmviz)
- Vue Language Features (Volar) (Johnson Chu)
- Code Runner for Web (Jun Han)
- GZDoom ZScript (kaptainmicila)
- nginx.conf hint (Liu Yue)
- Loadmill (Loadmill)
- UUID Generator (ludwhe)
- CSS Formatter (Martin Aeschlimann)
- SnowScript JS (Mauricio Rojas)
- HLASM Browser dev (mbali)
- Template String Converter (meganrogge)
- Micro Focus COBOL (Micro Focus)
- Micro Focus Enterprise (Micro Focus)
- Cursor Align (Mike Moore)
- Cursor Trim (Mike Moore)
- Multi-Cursor Search (Mike Moore)
- numeric (neal.bkn)
- Toast (Nick Bradley)
- steris (numso)
- N/A (Orta)
- Wurst language support (peterzeller)
- ShowFlags (PEW's Corner)
- Folder Archiver (Philip Damianik)
- ZIP archive type (Philip Damianik)
- Open In Webview Web Extension (Project μ)
- Replace On (rioj7)
- Select By (rioj7)
- Powercursor (Rishov Sarkar)
- BrightScript Language (RokuCommunity)
- Script Assets (Saige)
- LinkMe (saswatbh)
- Drawing Editor (Seflless)
- Azure ML Remote Web (sevillal)
- vscode-cml (sevillal)
- Reflow Paragraph (Stephen Sigwart)
- Neon Dark Theme (Sudhan)
- Japanese Word Handler (Suguru Yamamoto)
- tldraw (tldraw)
- vscodevim-sneak-fork (vscodevim-sneak-fork)
- Expression2-LS (Vurv78)
- Weigl WEM | Script (Weigl Control LLC)
- GreyScript (WyattL)
- mplstyle (Matplotlib) (yy0931)
- OverPy (Zezombye)
- COBOL Folding (zokugun)
- Explicit Folding (zokugun)
- Zokugun Themes (zokugun)
이슈 추적
이슈 추적에 대한 기여
- John Murray (@gjsjohnmurray)
- Andrii Dieiev (@IllusionMH)
- CodeCrazy-ywt (@CodeCrazy-ywt)
- Simon Chan (@yume-chan)
- ArturoDent (@ArturoDent)
- Lemmingh (@Lemmingh)
풀 리퀘스트
vscode 기여
- @adaex (Aex): 최신 seti-ui 아이콘 테마로 업데이트 PR #136375
- @alex-brs: build/npm/preinstall: 노드 버전 오류 메시지 수정 PR #136794
- @filiptronicek (Filip Troníček): 인수
connectionToken을connection-token으로 이름 변경 PR #136620 - @gjsjohnmurray (John Murray)
- QuickDiff 준비 중인 동안 활동 표시줄의 SCM에 진행률 표시기 추가 PR #136969
- 설정 설명에서 단어 누락(수정 #137027) PR #137028
- 계정의 비공개 로그인에서 충돌하는 범위 및 commandIds 방지(수정 #137601) PR #137613
- @grandeljay (Jay): PHP 문에서 대괄호 제거 PR #137447
- @Gvozd (Gvozd): 133348 편집기에서 검색이 열릴 때 OOM 수정 PR #136554
- @jeanp413 (Jean Pierre)
- 원격 터미널 오류 수정: Command $setUnicodeVersion을 찾을 수 없음 PR #136171
- 원격 터미널 제목이 다시 로드 시 복원되지 않는 문제 수정 PR #136176
- 터미널 탭을 이름 변경할 때 재귀적인 복사가 작동하지 않는 오류 수정 PR #136177
- vscode 서버를 수동으로 빌드할 때 누락된 파일 수정 PR #137570
- @jherchen (Johannes Herchen): preinstall 스크립트 수정 PR #136638
- @JustinGrote (Justin Grote): booleanRegex를 'true' 및 'false'만 올바르게 일치하도록 수정 PR #137822
- @jzyrobert (Robert Jin): html-language-features 문서 및 작업을 yarn으로 업데이트 PR #136543
- @laurentlb (Laurent Le Brun): 'expandLineSelection'을 올바른 작업으로 만듦. PR #135917
- @MalikIdreesHasanKhan (Malik Idrees Hasan Khan): 오타 수정. PR #135729
- @mamphis (Mattis Wacker): 활성 디버그 줄 + 중단점 글리프 누락 수정 PR #137471
- @mkantor (Matt Kantor): doc 주석에서 몇 가지 오타 수정 PR #137810
- @orange4glace: #fix: 108459 PR #108666
- @parched (James Duley): 작업 구성 오류 메시지 문법 수정. PR #137898
- @pdrgds (Pedro Guedes): #131458 수정 PR #136625
- @PEZ (Peter Strömberg)
- 옵션 추가: 스크린캐스트 오버레이에 명령 포함 PR #126742
- 단축키만 표시 설정 준수 PR #136251
- @pohzipohzi (Zi How Poh): 다음/이전 문제로 이동하는 옵션 추가 PR #135736
- @Pranomvignesh (Pranom Vignesh): 키 바인딩 제목 수정 PR #123071
- @rudavko (Andrii): 기존 유틸리티 함수를 사용하여 코드 중복 제거 PR #137016
- @RyanAfrish7 (Afrish Khan S): 마크다운의 이미지 href를 파일에서 vscode-file로 변경 PR #136687
- @SeriousBug (Kaan Genç): 확장이 내장 마크다운 미리보기 버튼을 비활성화하도록 허용 PR #136273
- @sijakret: html-language-features: customData.html에 대한 텍스트 문서 제공자 지원 PR #137557
- @smcenlly (Simon McEnlly): 출력 채널 렌더링 개선을 위한 출력 채널의 새 replaceAll API PR #136402
- @suzmue (Suzy Mueller): 존재하지 않는 경우 초점 스레드 지우기 PR #133637
vscode-codicons에 대한 기여
- @Profesor08:
newline아이콘 추가 PR #91
vscode-css-languageservice에 대한 기여
- @avigoldman (Avi Goldman):
kind속성 존중 PR #254
vscode-eslint 기여
- @asingh04 (Abhishek Singh): 기존 비활성화 규칙 주석 처리 PR #1261
vscode-extension-samples 기여
vscode-html-languageservice에 대한 기여
- @gustavnikolaj (Gustav Nikolaj): 모든 src 및 href 속성에서 완료 트리거 PR #117
- @jzyrobert (Robert Jin): 속성 태그에 대한 자동 완성 추가 PR #116
vscode-json-languageservice 기여
- @gjsjohnmurray (John Murray): 호스트 이름, ipv4 및 ipv6 형식 유효성 검사 (#_100) PR #118
- @mati-o (Mati O): $ref를 $id로 수정 PR #107
- @Relequestual (Ben Hutton): JSON Schema draft 2020-12는 아직 지원되지 않음을 알림 PR #117
vscode-languageserver-node에 기여
- @CodingDoll: engines 필드 node 14+ 수정 PR #862
- @fvclaus: 범위가 정의되지 않은 경우 SymbolInformation의 위치가 손실됨 PR #849
- @hamirmahal (Hamir Mahal)
- @robertoaloi (Roberto Aloi): 오류 메시지 오타 수정 PR #866
vscode-pull-request-github 기여
- @38elements (38elements)
- @burkeholland (Burke Holland): Gist 저장소를 열면 가져오기 오류 발생 PR #2933
- @emtei (Mateusz Stopka): 닫혔거나 병합된 PR에 대해 검토 모드 활성화 안 함 PR #3021
- @taisph (Tais P. Hansen): bash에서 따옴표가 필요한 생성된 브랜치 이름 수정 PR #3084
vscode-vsce 기여
- @microhobby (Matheus Castello):
libsecret을Dockerfile에 추가하고README에 종속성 언급 PR #646
language-server-protocol 기여
- @doriath (Tomasz Zurkowski): 이름 변경 요청에 대한 응답 명확화. PR #616
- @yxrkt: ResponseMessage.result는 배열 유형일 수 있음 PR #1012
monaco-editor 기여
- @activeguild (j1ngzoue): 'browser-ems-vite-react' 샘플 추가 PR #2767
- @emojiiii (C.Y.Kun): 웹사이트 플레이그라운드 오류 수정 PR #2779
- @MasterOdin (Matthew Peveler)
- @milahu: monaco.d.ts 링크 수정 PR #2769
- @Pranomvignesh (Pranom Vignesh): Semantic Tokens Provider 샘플이 문서에서 작동하지 않음 PR #2764
- @rramo012 (Rafael Ramos): 문서 링크 수정 PR #2748