이 출시되었습니다! 11월의 새로운 기능 및 수정 사항을 읽어보세요.

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월 릴리스에 오신 것을 환영합니다. 이번 버전에는 여러분이 좋아하실 만한 많은 업데이트가 포함되어 있으며, 주요 변경 사항은 다음과 같습니다.

이 릴리스 노트를 온라인으로 읽으려면 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 파일에서 javascripttypescript 언어에 대한 설정을 함께 사용자 지정하는 방법을 보여줍니다.

"[javascript][typescript]": {
  "editor.maxTokenizationLineLength": 2500
}

자동 2x2 편집기 그리드

실제 2x2 그리드 편집기 레이아웃은 보기: 그리드 편집기 레이아웃(2x2) 명령을 통해서만 가능했습니다. 이제 편집기를 수동으로 분할하여 2x2 그리드에 도달하면 동일한 레이아웃을 얻을 수 있으며, 그리드가 자동으로 실제 2x2 레이아웃으로 고정됩니다.

목록에서 Escape 키 처리 개선

이제 목록 및 트리에서 Escape 키를 누르면 선택이 단일 요소로 축소된 후 지워집니다.

웹에서 찾기 사용 가능

VS Code가 브라우저에서 실행 중일 때(아래 예시의 github.dev) 웹뷰 내부에서 찾기 컨트롤이 지원됩니다.

Find widget on github.dev

현재 브라우저 API의 제한으로 인해 웹에서의 찾기는 데스크톱과 다르게 작동합니다. 예를 들어, 웹에서는 VS Code가 현재 찾기 결과만 강조 표시할 수 있습니다. 데스크톱에서는 모든 결과가 현재 파일에 강조 표시됩니다.

스크린캐스트 모드에서 명령 이름 표시

이제 스크린캐스트 모드에서 키보드 단축키를 통해 명령을 트리거할 때 명령 이름을 선택적으로 표시할 수 있습니다. 이 동작을 구성하려면 스크린캐스트 모드: 키보드 단축키 형식(screencastMode.keyboardShortcutsFormat) 설정을 사용하세요.

Screencast mode with command names along with keystrokes

사전 릴리스 확장

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

Pre-Release install dropdown

테마: GitHub Light Theme

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

Pre-Release version indication

테마: GitHub Light Theme

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

Switch to Pre-Release version button

테마: GitHub Light Theme

업데이트된 찾기 작업

검색 보기의 찾기 작업은 이제 편집기의 찾기 작업과 동일한 스타일을 사용합니다.

소스 제어

빠른 비교에서 공백 자르기 무시

이제 왼쪽 여백에 표시되는 SCM 빠른 비교 기능이 scm.diffDecorationsIgnoreTrimWhitespace 설정을 사용하여 공백 자르기를 무시하도록 구성할 수 있습니다.

노트북

노트북에서 글꼴 크기 조정

새로운 notebook.markup.fontSize 설정을 통해 노트북 Markdown 콘텐츠의 글꼴 크기를 제어할 수 있습니다. 이 설정의 기본값은 현재 편집기 글꼴 크기의 120%입니다.

Markdown 셀의 구문 강조 표시

VS Code는 이제 Markdown 셀 내의 구분된 코드 블록의 구문 강조 표시를 지원합니다.

A fenced code block in a notebook with syntax highlighting

이제 노트북 내의 Markdown은 현재 작업 영역의 다른 파일에 연결할 수 있습니다.

/로 시작하는 링크는 작업 영역 루트에 상대적으로 확인됩니다. ./로 시작하거나 파일 이름으로만 시작하는 링크는 현재 노트북에 상대적으로 확인됩니다.

또한 http 또는 https를 포함하는 Markdown 텍스트가 이제 자동으로 링크로 변환됩니다.

A link automatically created from Markdown text

이는 JupyterLab과 같은 다른 노트북 렌더러의 동작과 일치합니다.

노트북 도구 모음 레이블의 동적 가시성

노트북 도구 모음은 notebook.globalToolbarShowLabeldynamic으로 설정하여 편집기 그룹의 너비에 따라 작업의 레이블을 표시할지 여부를 결정할 수 있습니다. 가장 오른쪽 작업 그룹부터 레이블을 숨긴 다음 왼쪽 그룹의 레이블을 숨깁니다. 모든 레이블이 숨겨진 후에도 편집기 그룹이 여전히 너무 좁으면 작업이 오버플로 메뉴로 이동됩니다.

notebook.globalToolbarShowLabel의 다른 값은 이제 alwaysnever입니다.

편집기

유니코드 강조 표시

소스 코드의 모든 흔하지 않은 숨겨진 문자는 이제 기본적으로 강조 표시됩니다.

Unicode Highlighting Example: Invisible character is highlighted with hover explanation

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

Unicode Highlighting Example: Confusing character is highlighted with hover explanation

숨겨지거나 혼동하기 쉬운 유니코드 문자가 유니코드 스푸핑 공격에 사용될 수 있는 방법에 대해 "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 Scripts view with script details

또한 NPM 스크립트 보기에서 제외할 스크립트를 지정할 수 있는 새로운 설정 npm.scriptExplorerExclude가 있습니다.

언어

TypeScript 4.5

VS Code는 이제 TypeScript 4.5를 제공합니다. 이 업데이트는 도구 개선 및 버그 수정과 함께 다양한 새로운 언어 기능을 제공합니다.

TypeScript 블로그에서 TypeScript 4.5에 대해 자세히 알아볼 수 있습니다. TypeScript 블로그.

메서드 서명 완성

메서드 서명 완성 기능을 사용하면 메서드를 빠르게 오버라이드하고 인터페이스 메서드를 구현할 수 있습니다. 이 기능을 사용하면 클래스 본문 내에서 제안(예: 슈퍼 클래스의 메서드)을 수락할 때 메서드 전체 서명이 삽입됩니다.

TypeScript를 작성하는 경우 제안을 수락하면 서명에 참조된 타입에 대한 모든 필요한 가져오기가 추가됩니다.

이 기능은 작업 영역에 TypeScript 4.5가 필요하며 typescript.suggest.classMemberSnippets.enabledjavascript.suggest.classMemberSnippets.enabled를 사용하여 활성화/비활성화할 수 있습니다.

JSX 속성 완성

JavaScript 및 TypeScript에서 JSX 속성을 완성할 때 VS Code는 이제 자동으로 특성 값을 삽입합니다.

이러한 완성의 동작은 javascript.preferences.jsxAttributeCompletionStyletypescript.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 language selector

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 내에서 직접 테스트 실행을 다룹니다.

Extension Pack for Java walkthrough

또한 시작하는 데 도움이 되는 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만 지원됩니다.

상태 표시줄의 언어 항목이 이러한 상황을 나타내도록 업데이트되었습니다.

Limited support for Python in an untrusted workspace

모듈 이름 바꾸기 리팩토링

이제 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에 포함되었는지 알기 어려웠습니다. 이제 제안별로 파일이 있습니다.

예를 들어,

각 제안에는 고유한 이름이 있으며 제안된 API를 사용하려는 확장은 package.json에 해당 이름을 나열해야 합니다. package.jsonenableProposedApi 속성은 이제 제안 이름의 문자열 배열이며 IntelliSense 및 유효성 검사 지원이 포함된 새로운 enabledApiProposals로 대체되었습니다.

IntelliSense when authoring the enabledApiProposals property

API 제안에 대한 업데이트된 흐름은 다음과 같습니다.

  1. 사용하려는 제안을 찾고 해당 이름을 package.json#enabledApiProposals에 추가합니다.
  2. 최신 vscode-dts를 사용하고 vscode-dts dev를 실행하세요. 그러면 해당 d.ts 파일이 작업 영역으로 다운로드됩니다.
  3. 이제 제안에 대한 프로그래밍을 할 수 있습니다.

상세한 마이그레이션 가이드 및 샘플 마이그레이션은 이슈 #136964에서 확인할 수 있습니다. 또한 제안된 API 사용에 대한 제한 사항은 변경되지 않았습니다. 제안된 API를 사용하는 확장은 게시할 수 없으며 그대로 사용할 수 없습니다.

빠른 선택 API 개선

이번 반복에서는 VS Code의 QuickPick에 대한 몇 가지 API를 마무리하고 있습니다.

QuickPick 항목의 인라인 버튼

풍부한 입력 환경을 제공하는 것은 확장 API의 목표이며, VS Code의 Quick Pick에 대한 익숙함을 사용하면 강력하면서도 간단한 UI 흐름을 만들 수 있습니다. 한 가지 추가된 사항은 확장이 이제 개별 QuickPickItem에 버튼을 추가할 수 있다는 것입니다.

QuickPickItem buttons

버튼을 클릭하면 QuickPick 개체에 있는 onDidTriggerItemButton 이벤트가 트리거됩니다. 확장 프로그램에서 이러한 버튼을 사용하는 방식을 기대합니다.

항목 업데이트 시 스크롤 위치 유지 기능

QuickPickItem에 버튼을 추가하는 기능과 더불어 항목을 업데이트할 때 스크롤 위치를 유지하고 싶을 수도 있습니다. 이는 다음과 같은 경우에 흔히 발생하는 확장 프로그램의 사용 사례입니다.

  • "이 항목을 목록에서 제거"(예: Ctrl/Cmd + P x QuickPickItemButton)를 구현합니다.
  • "이 항목을 어떤 방식으로든 전환"(예: "스니펫 삽입" 명령)을 구현합니다.
  • 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로 설정하면 사용자에게 다음이 표시됩니다.

Forcing sign in

사용자에게 더 설명적인 메시지를 표시하고 싶다면 detail 문자열이 있는 객체를 지정할 수도 있습니다.

확장이 세션을 가지고 있다면 자동으로 검색

확장 프로그램이 활성화될 때 인증 세션이 있는지 확인하는 것이 일반적인 패턴입니다. 있다면 데이터를 미리 로드하고 나중에 성능을 향상시키기 위해 다른 작업을 수행하는 데 사용합니다. 이것의 단점은 사용자가 해당 확장 프로그램에 인증 세션에 대한 액세스 권한을 부여하지 않은 경우 계정 메뉴에 배지가 표시되고 메뉴 항목에 로그인하라는 메시지가 추가된다는 것이었습니다.

어떤 경우에는 괜찮지만, 다른 경우에는 바람직하지 않고 사용자에게 화면을 복잡하게 만듭니다. 이를 돕기 위해 AuthenticationGetSessionOptionssilent이라는 새 속성이 있습니다. 이 속성을 사용하면 확장 프로그램이 요청했다는 표시 없이 세션을 요청할 수 있습니다. 그렇게 하면 확장 프로그램이 세션을 얻을 수 있는 능력이 있다면 원하는 작업을 수행할 수 있지만, 그렇지 않다면 사용자에게 번거롭게 하지 않습니다.

참고: 이 API는 확장 프로그램이 이전에 세션에 대한 액세스 권한을 부여받은 경우에만 인증된 세션을 반환합니다(즉, "신뢰할 수 있는 확장 프로그램"입니다). 사용자가 동의하지 않은 세션은 확장 프로그램에 절대 부여되지 않습니다.

설정 편집기 개선

정렬된 설정

개별 설정은 이제 order 필드를 사용하여 정렬할 수 있습니다. 정렬된 설정은 항상 동일한 범주 내에서 정렬되지 않은 설정보다 먼저 오며, 정렬은 상대적입니다.

그룹화되지 않은 범주 지원

설정은 특정 범주 대신 기본 확장 프로그램 헤더 아래에 그룹화될 수도 있습니다. 이렇게 하려면 범주 중 하나의 범주 제목을 확장 프로그램 표시 이름과 동일하게 설정합니다.

아래 예에서 Conf > 언어: 크기 표시 설정이 구성 샘플 헤더 바로 아래에 있음을 확인하세요.

Settings appearing directly under the extension header

숫자 및 정수 개체 지원

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

An object setting in the Settings editor with number/integer values

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.jsonconfigurationDefaults 기여 지점을 통해 다른 등록된 구성의 기본값을 재정의할 수 있습니다. 예를 들어, 다음 스니펫은 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를 시험해 보는 단계는 다음과 같습니다.

  1. 시험하고 싶은 제안을 찾아 package.json#enabledApiProposals에 해당 이름을 추가하세요.
  2. 최신 vscode-dts를 사용하고 vscode-dts dev를 실행하세요. 그러면 해당 d.ts 파일이 작업 영역으로 다운로드됩니다.
  3. 이제 제안에 대한 프로그래밍을 할 수 있습니다.

제안 API를 사용하는 확장은 게시할 수 없습니다. 다음 릴리스에서 호환성이 깨지는 변경 사항이 있을 수 있으며, 기존 확장을 깨뜨리는 일은 절대 없을 것입니다.

QuickPickItem 구분선

이번 반복에서는 제안된 API(vscode.proposed.quickPickSeparators.d.ts)를 통해 확장이 Quick Pick에 구분선("범주"라고도 함)을 추가할 수 있는 기능을 도입합니다. 이는 항목을 그룹화하거나 항목 사이에 약간의 공간을 두는 데 유용합니다.

Quick Pick separators

기존 Quick Pick에 구분선을 추가하려면 새 QuickPickItem을 기존 항목 목록에 추가하지만 QuickPickItemkind 속성을 지정하고 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일까지)

이슈 추적

이슈 추적에 대한 기여

풀 리퀘스트

vscode 기여

vscode-codicons에 대한 기여

vscode-css-languageservice에 대한 기여

vscode-eslint 기여

vscode-extension-samples 기여

vscode-html-languageservice에 대한 기여

vscode-json-languageservice 기여

vscode-languageserver-node에 기여

vscode-pull-request-github 기여

vscode-vsce 기여

language-server-protocol 기여

monaco-editor 기여

© . This site is unofficial and not affiliated with Microsoft.