2022년 10월 (버전 1.73)
업데이트 1.73.1: 이 업데이트는 다음 이슈들을 해결합니다.
다운로드: Windows: x64 Arm64 | Mac: Universal Intel silicon | Linux: deb rpm tarball Arm snap
Visual Studio Code의 2022년 10월 릴리스에 오신 것을 환영합니다. 이번 버전에는 여러분이 좋아하실 만한 많은 업데이트가 포함되어 있으며, 주요 내용은 다음과 같습니다.
- 검색에 폴더 포함/제외 - 트리 보기에서 포함/제외할 폴더를 빠르게 설정합니다.
- 명령 센터 모드 바로가기 - 자주 사용되는 모드를 최근 파일 목록 앞에 표시합니다.
- 병합 편집기 개선 - 충돌을 자동으로 병합하는 조합 옵션에 액세스합니다.
- Markdown 자동 링크 업데이트 - 파일 및 이미지 링크가 이름 변경/이동 시 업데이트됩니다.
- 더 많은 오디오 큐 - 작업 완료 또는 실패, 터미널 빠른 수정 사용 가능.
- vscode.dev 보호된 브랜치 워크플로 - 보호된 브랜치에 커밋할 때 새 브랜치를 생성합니다.
- 새 Python 확장 - isort, Pylint 및 Flake8에 대한 새로운 독립형 확장.
- Dev Container 템플릿 - 기존 템플릿을 기반으로 새 Dev Container를 생성합니다.
이 릴리스 노트를 온라인으로 읽으려면 code.visualstudio.com의 업데이트로 이동하십시오.
Insider: 새로운 기능을 최대한 빨리 사용해 보고 싶으신가요? 야간 빌드인 Insider 빌드를 다운로드하고 사용 가능한 최신 업데이트를 즉시 사용해 보세요.
접근성
새로운 오디오 큐
작업 및 터미널을 돕기 위한 새로운 오디오 큐가 있습니다.
- 작업 완료 - 작업이 완료되었음을 알리는 소리(
audioCues.taskCompleted설정으로 제어). - 작업 실패 - 작업이 실패했을 때 나는 소리(
audioCues.taskFailed). - 터미널 빠른 수정 - 현재 줄에서 빠른 수정(Quick Fix)을 사용할 수 있는 경우(
audioCues.terminalQuickFix).
스크린 리더 모드에서의 단어 줄 바꿈
스크린 리더 모드에서 VS Code를 실행할 때 단어 줄 바꿈이 비활성화되어 스크린 리더 경험이 저하되는 것을 방지했습니다. 이 문제가 해결되었으며 editor.wordWrap을 통해 활성화할 수 있습니다.
접근성 설정 태그
접근성 관련 설정을 더 쉽게 찾을 수 있도록 accessibility 태그를 사용할 수 있습니다.
기본 설정: 접근성 설정 열기 명령은 @tag:accessibility 필터를 사용하여 설정 편집기를 엽니다.
워크벤치
검색에서 폴더 포함 및 제외
결과의 트리 보기에서 검색 보기의 폴더를 마우스 오른쪽 버튼으로 클릭하면 컨텍스트 메뉴에 두 가지 새로운 옵션이 있습니다.
-
폴더로 검색 제한을 선택하면 선택한 폴더 경로가 포함할 파일 텍스트 상자에 추가됩니다. 이 텍스트 상자에 경로를 추가하면 나열된 경로 또는 패턴과 일치하는 결과로 검색 결과가 제한됩니다.

테마: GitHub Dark Dimmed (vscode.dev에서 미리 보기)
-
검색에서 폴더 제외를 선택하면 선택한 폴더 경로가 제외할 파일 텍스트 상자에 추가됩니다. 여기에 경로를 추가하면 나열된 경로 또는 패턴과 일치하는 검색 결과가 제외됩니다.

테마: GitHub Dark Dimmed (vscode.dev에서 미리 보기)
명령 센터 모드 바로가기
명령 센터에 새로운 상단 섹션이 추가되어 파일로 이동, 명령 실행 등을 쉽게 파악할 수 있습니다.
이 짧은 모드 목록은 키 바인딩 힌트도 제공하므로 명령 센터를 거치지 않고 가장 많이 사용하는 모드(예: 파일로 이동)로 직접 이동할 수 있습니다.
명령 센터 UI는 기본적으로 제목 표시줄에 표시되지 않지만, 창: 명령 센터(window.commandCenter) 설정을 통해 활성화하거나 제목 표시줄을 마우스 오른쪽 버튼으로 클릭하고 명령 센터를 선택하여 활성화할 수 있습니다.
설정 편집기 작업 영역 신뢰 및 정책 표시기
제한 모드 작업 영역으로 인해 적용되지 않거나 조직 정책에 따라 관리되는 설정은 이제 표시기를 사용하여 상태를 나타냅니다. 사용자는 제한 모드 작업 영역에서도 작업 영역 설정을 읽고 쓸 수 있지만(이전에도 settings.json 파일을 사용하여 항상 가능했음), 제한된 작업 영역에서 사용되는 최종 설정 값 계산 시 작업 영역 설정 값은 고려되지 않습니다.
기본 라이트 테마에도 몇 가지 조정이 있었으며, 표시기 영역에서 더 명확한 codicon 렌더링과 더 좁은 포커스 테두리가 적용되었습니다.

개요 기본 축소 상태
outline.collapseItems라는 새로운 설정은 개요 보기의 항목에 대한 기본 축소 상태를 제어합니다. 기본값은 false로, 개요 항목이 기본적으로 확장됨을 의미합니다. 이를 true로 설정하면 개요 항목이 기본적으로 축소됩니다. 이 설정은 언어별로 설정할 수 있으며 노트북에서도 작동합니다.
보기 메뉴 재정렬
VS Code 메뉴의 보기 메뉴에서 마지막 그룹은 편집기 작업의 증가하는 목록이었습니다. 메뉴의 성장과 기능성의 균형을 맞추기 위해 주로 모양과 관련된 항목들을 모양 하위 메뉴로 이동했습니다. 단어 줄 바꿈 및 고정 스크롤 옵션은 메뉴 하단 원래 위치에 그대로 두었습니다.

테마: GitHub Light Default (vscode.dev에서 미리 보기)
입력 UI의 둥근 모서리
이전 릴리스에서 버튼에 적용된 스타일과 일치하도록 텍스트 입력, 텍스트 영역 및 드롭다운 모두에 둥근 모서리가 표시됩니다.

빠른 선택 목록 스타일 업데이트
빠른 선택 UI에서 사용되는 목록 스타일이 둥근 모서리와 증가된 좌우 여백으로 약간 새로워졌습니다.
목록 보기에 대한 codicon 업데이트
평면 목록 및 트리 목록 보기에서 이제 목록 유형을 나타내는 데 더 읽기 쉬운 codicon을 사용합니다.
보조 사이드바 전경색
보조 사이드바는 일반적으로 기본 사이드바의 테마를 모방하지만, 모든 테마 키가 제대로 인식되지 않았습니다. 보조 사이드바는 이제 "sideBar.foreground" 테마 키를 올바르게 사용합니다.
오른쪽에 탐색기가 있는 기본 사이드바와 왼쪽에 개요 보기가 있는 보조 사이드바 모두 동일한 분홍색 전경색을 사용합니다.

테마: GitHub Light Default (vscode.dev에서 미리 보기)
더 이상 '접기 범위가 너무 많음' 알림 없음
성능상의 이유로 편집기에서 표시되는 접기 범위 수를 5000개로 제한합니다. 이 제한은 editor.foldingMaximumRegions 설정으로 구성할 수 있습니다. 제한을 초과하면 VS Code는 알림을 표시했습니다. 이제 상태 표시줄의 언어 상태 호버가 해당 정보를 표시합니다.

기본 접기 프로바이더
일반적으로 언어에 대해 여러 접기 프로바이더가 활성화된 경우 VS Core는 결과를 병합하려고 시도합니다. 충돌하는 범위가 있으면 일부 범위가 삭제됩니다. 또한 모든 접기 프로바이더가 다른 프로바이더와 결합될 수 있는 것은 아닙니다.
새로운 editor.defaultFoldingProvider 설정을 사용하면 사용할 접기 프로바이더를 선택할 수 있습니다. 프로바이더의 이름은 이를 제공하는 확장 프로그램의 확장 ID({publisher}.{extension})입니다.
다음 스크린샷은 JavaScript에 대한 (가상) 확장 프로그램 aeschli.better-folding의 접기 프로바이더를 기본값으로 설정하는 예를 보여줍니다.
"[javascript]": {
"editor.defaultFoldingRangeProvider": "aeschli.better-folding"
}
출력 채널별 로그 수준 설정
이제 개발자: 로그 수준 설정... 명령을 사용하여 로그 출력 채널별로 로그 수준을 설정할 수 있습니다. 특정 로그 출력 채널의 로그만 더 많이 보고 싶을 때 유용합니다. 이 명령은 먼저 출력 채널 목록을 표시하고 하나를 선택한 후 로그 수준을 설정하라는 메시지가 표시됩니다.

명령줄에서도 확장 프로그램별로 로그 수준을 설정할 수 있습니다. 특정 확장 프로그램의 로그를 더 많이 보고 싶을 때 유용합니다. 예를 들어, 다음 스크립트를 사용하면 Git 확장 프로그램의 로그 출력 채널에 대해 기본 로그 수준이 debug로 설정된 VS Code를 시작할 수 있습니다.
code --log vscode.git:debug
새로운 `list.collapseAllToFocus` 트리 보기 명령
새로운 list.collapseAllToFocus 명령을 사용하면 현재 포커스된 트리 항목을 재귀적으로 축소할 수 있습니다. 루트가 아닌 트리 항목의 모든 자식을 축소하고 싶을 때 유용합니다. 이 명령에 대한 기본 키 바인딩은 없지만 키 바인딩 편집기(⌘K ⌘S (Windows, Linux Ctrl+K Ctrl+S))를 통해 자체 키보드 단축키를 추가할 수 있습니다.
병합 편집기
이번 마일스톤에서는 병합 편집기를 계속 다듬었으며, 이번 업데이트에는 몇 가지 버그 수정과 새로운 기능이 포함되었습니다.
양쪽 모두 수락 시 충돌 추가
이번 릴리스에서는 수신 항목 수락 및 현재 항목 수락을 항상 선택할 수 있습니다. 두 옵션 모두 선택하면 병합 편집기가 해당 변경된 줄을 추가합니다.
아래의 짧은 동영상에서는 RelativePattern이 두 번 가져와지는데, 이는 두 줄 모두 수락되었기 때문입니다.

문자 수준에서 충돌 없이 해결할 수 있는 경우, 조합 수락 옵션이 표시되며 충돌을 자동으로 해결하는 데 사용할 수 있습니다.
아래 동영상에서는 두 기호가 동일한 import 문으로 가져와집니다.

기본과의 차이 장식
기본 보기(base view)가 열리면 현재 포커스된 측면과 기본 간의 차이가 표시됩니다. 이 차이 보기(diff view)를 사용하여 수신 및 현재의 변경 사항을 더 잘 이해할 수 있습니다.

차이 알고리즘 개선
병합 편집기의 기본 차이 알고리즘이 변경되었습니다. 새로운 차이 알고리즘은 병합 시나리오에 최적화되어 있습니다. 일반적인 경우, 덩어리(hunk) 수가 최소화되고 삽입 위치가 최적화됩니다. 새 알고리즘으로 인해 문제가 발생하는 경우 "mergeEditor.diffAlgorithm": "smart" 설정을 사용하여 이전 알고리즘으로 돌아갈 수 있습니다(기본값은 이제 experimental).
다음 스크린샷은 삽입에 대한 개선 사항을 보여줍니다. 두 차이 모두 정확하지만 새로운 동작이 삽입된 텍스트를 더 명확하게 강조한다는 점에 유의하십시오.
이전 동작

새로운 동작

새로운 차이 알고리즘은 현재 병합 편집기에서만 기본적으로 활성화됩니다. 일반 차이 편집기에서도 새로운 차이 알고리즘을 사용하도록 하려면 "diffEditor.diffAlgorithm": "experimental"을 설정하면 됩니다.
충돌 탐색
이제 충돌 카운터를 클릭하여 처리되지 않은 다음 충돌로 이동할 수 있습니다.

언어
파일 이름 변경 / 이동 시 Markdown 자동 링크 업데이트
VS Code 탐색기에서 파일을 이동하거나 이름을 바꿀 때 Markdown의 링크나 이미지가 실수로 깨지는 것에 지치셨나요? 새로운 markdown.updateLinksOnFileMove.enabled 설정을 사용해 보세요!
이 새 설정을 활성화하면 VS Code는 VS Code 탐색기에서 파일을 이동하거나 이름을 바꿀 때 Markdown의 링크와 이미지를 자동으로 업데이트합니다.

markdown.updateLinksOnFileMove.include를 사용하여 영향을 받는 파일 유형을 제어할 수 있습니다. 기본적으로 모든 Markdown 파일 및 일반 이미지 파일 형식에 대해 활성화됩니다.
Markdown 링크 삽입 명령
새로운 Markdown: 작업 영역의 파일에 링크 삽입 및 Markdown: 작업 영역에서 이미지 삽입 명령을 사용하면 파일 선택기를 사용하여 Markdown에 빠르게 링크와 이미지를 삽입할 수 있습니다.
이러한 명령은 Markdown 파일에 링크와 이미지를 추가하는 한 가지 옵션일 뿐임을 기억하십시오. 이를 위해 Markdown 경로 완성을 사용하거나 VS Code 탐색기에서 파일을 끌어다 놓아 링크나 이미지를 삽입할 수도 있습니다.
Markdown 사용되지 않는 및 중복 링크 정의 진단
내장 Markdown 유효성 검사에서 이제 사용되지 않거나 중복된 링크 정의를 알려줍니다. markdown.validate.enabled로 이 기능을 활성화할 수 있습니다.

이러한 오류에 대해 더 세분화된 제어를 원하면 markdown.validate 설정을 사용하여 이러한 오류를 비활성화(ignore)하거나 심각도를 변경(warning, error)할 수 있습니다.
markdown.validate.duplicateLinkDefinitions.enabledmarkdown.validate.unusedLinkDefinitions.enabled
중복 또는 사용되지 않는 링크 정의를 제거하는 빠른 수정 기능도 있습니다.
Markdown 링크 발생 강조 표시
Markdown의 링크 발생 강조 표시는 현재 문서에서 커서 아래 링크가 사용되는 모든 위치를 보여줍니다.

문서의 첫 번째 링크에 커서가 있을 때 First Header로 연결되는 모든 링크와 헤더 자체도 문서 및 문서 오른쪽 여백에 강조 표시되는 것을 확인하십시오.
이 기능은 기본적으로 꺼져 있습니다. 활성화하려면 markdown.occurrencesHighlight.enabled 설정을 켜십시오.
새로운 Razor 구문 강조 표시 문법
VS Code에는 Razor 파일의 구문 강조 표시를 위한 새롭고 더 잘 유지 관리되는 Razor 문법이 있습니다. 새 문법은 적극적으로 유지 관리되며 이전 문법의 문제를 해결합니다.
웹용 VS Code
개선된 브랜치 생성 및 보호 워크플로
VS Code for the Web에서 GitHub 또는 Azure Repos 저장소를 사용하는 경우, 보호된 브랜치에 커밋하면 현재 브랜치가 보호되었다는 알림이 표시되고 새 브랜치를 만들라는 메시지가 표시됩니다.
이 흐름은 다음 설정도 존중합니다.
git.branchPrefix를 사용하면 구성된 접두사로 브랜치 이름 빠른 입력을 미리 채울 수 있습니다."git.branchProtectionPrompt": "alwaysCommitToNewBranch"를 사용하면 보호된 브랜치에 커밋하려고 할 때 프롬프트를 건너뛰고 새 브랜치 생성을 위한 빠른 입력으로 바로 이동할 수 있습니다.
또한 새 브랜치를 만들 때 "remoteHub.switchToCreatedBranch": "always"를 구성하여 새로 생성된 브랜치로 전환할 것인지 묻는 프롬프트를 건너뛸 수 있습니다.
위의 모든 내용은 데스크톱용 VS Code에서 GitHub Repositories 또는 Azure Repos 확장을 사용할 때도 적용됩니다.
웹에서의 현지화 개선
몇 달 전 VS Code for the Web에 대한 현지화 작업을 시작했습니다. 지금까지 VS Code 코어와 확장 프로그램 매니페스트에 정적으로 선언된 문자열이 있는 확장 프로그램은 현지화할 수 있었습니다. 이번 반복에서는 퍼즐의 마지막 조각인 확장 프로그램 코드의 문자열을 완료했습니다. 이는 지난달에 제안한 현지화 API의 최종화 덕분에 완료되었습니다.
모든 확장 프로그램에 이 새로운 API를 계속 채택함에 따라 VS Code의 더 많은 부분이 현지화될 것으로 예상하십시오. 확장 프로그램 작성자라면 vscode-l10n 저장소에서 새 API에 대해 자세히 알아볼 수 있습니다.
확장 프로그램 기여
Python
isort 확장으로 마이그레이션
2022년 5월 릴리스에서 Python 확장과 함께 작동하여 import를 정렬하는 새로운 isort 확장을 발표했습니다. 예를 들어, 파일을 열었는데 import가 isort 표준을 따르지 않으면 오류 진단이 표시되고 import 순서를 수정하는 코드 액션이 제공됩니다. 이번 릴리스에서는 Python 확장 프로그램에 내장된 isort 지원 대신 독립형 isort 확장을 사용하도록 마이그레이션하여 Python 확장 프로그램과 함께 자동으로 설치합니다.
Pylance의 자동 import 기본 비활성화
Pylance에 자동 import가 처음 구현된 이후, 예를 들어 제안이 실수로 수락될 때 파일에 import가 자동으로 추가되는 것이 얼마나 혼란스럽고 때로는 짜증 나는지에 대한 피드백을 많이 받았습니다. 이번 릴리스부터 Pylance를 사용할 때 패키지가 기본적으로 자동으로 import되지 않습니다. Python 프로젝트에 대한 자동 import를 다시 활성화하려면 "python.analysis.autoImportCompletions": true를 설정하면 됩니다.
Pylint 및 Flake8 확장 권장 사항
이전 릴리스 및 릴리스에서 Python 확장과 함께 언어 서버 프로토콜(LSP)을 통해 작동하여 linting을 제공하는 새로운 Pylint 및 Flake8 확장을 발표했습니다. 이번 릴리스에서는 Python 확장 프로그램에 내장된 Pylint 및 Flake8 기능을 여전히 사용하고 있다면 이러한 새 확장을 설치하라는 알림을 표시합니다.

원격 개발
원격 개발 확장 프로그램을 사용하면 컨테이너, 원격 머신 또는 Linux용 Windows 하위 시스템(WSL)을 완전 기능 개발 환경으로 사용할 수 있습니다. 이번 릴리스의 주요 내용은 다음과 같습니다.
- Dev Container 템플릿 - 기존 템플릿을 기반으로 Dev Container를 빠르게 생성합니다.
- Dev Container 기능 - 사전 포장된 기능을 포함하여 Dev Container에 기능을 추가합니다(자신만의 기능 만들기!).
- 시작 폴더 없이 새 Dev Container 생성.
새로운 확장 기능 및 버그 수정에 대한 자세한 내용은 원격 개발 릴리스 노트에서 확인할 수 있습니다.
GitHub Pull Requests 및 Issues
GitHub Pull Requests and Issues 확장 프로그램에 대한 작업이 계속 진행 중이며, 이를 통해 pull 요청 및 이슈를 작업하고, 생성하고, 관리할 수 있습니다. 확장 프로그램의 0.54.0 릴리스에 대한 변경 로그를 확인하여 다른 주요 내용을 살펴보세요.
미리 보기 기능
TypeScript 4.9
이번 업데이트에는 예정된 TypeScript 4.9 릴리스에 대한 지원이 포함됩니다. TypeScript 팀이 현재 작업 중인 내용에 대한 자세한 내용은 TypeScript 4.9 반복 계획을 참조하세요. 일부 편집기 도구 주요 내용
- 사용되지 않는 import를 제거하지 않고 import를 정렬하는 새로운 Import 정렬 명령.
- 반환 문에서 정의로 이동을 실행하면 함수 선언으로 이동합니다.
- 더 나은 성능을 제공해야 하는 새로운 기본 파일 감시자로 전환합니다.
TypeScript 4.9 야간 빌드를 사용하려면 TypeScript Nightly 확장을 설치하세요.
설정 프로필
지난 몇 달 동안 VS Code에서 가장 많이 요청되는 기능 중 하나인 **설정 프로필** 지원을 위해 노력해 왔습니다. 이 기능은 workbench.experimental.settingsProfiles.enabled 설정을 통해 미리 볼 수 있습니다. 사용해 보고 vscode 저장소에 이슈를 생성하거나 이슈 #116740에 댓글을 달아 피드백을 제공해 주세요.
동기화된 프로필 데이터 표시
이제 동기화 활동(원격) 보기에서 각 프로필에 대해 동기화되는 데이터를 볼 수 있습니다. 각 프로필에 대해 동기화되는 데이터를 이해하는 데 유용합니다.

참고: 이 기능은 현재 VS Code의 Insiders 릴리스에서만 사용할 수 있습니다.
확장 프로그램 작성
작업 영역 편집에 대한 메타데이터 제공
작업 영역 편집을 적용하는 API를 사용하면 이제 확장 프로그램에서 리팩토링으로 편집을 표시하는 등의 메타데이터를 제공할 수 있습니다. 이 추가 메타데이터는 편집기와 리팩토링 후 자동 저장(설정: files.refactoring.autoSave)에서 존중됩니다.
MarkdownString 및 웹뷰에서 실행할 수 있는 명령 제한
MarkdownString의 명령 링크는 VS Code의 호버 메시지 또는 IntelliSense 세부 정보에 사용자 지정 상호 작용을 만드는 유용한 방법입니다. 웹뷰는 명령 링크를 사용하여 웹뷰에서 직접 VS Code 명령을 트리거할 수도 있습니다. 그러나 명령 링크는 보안에 중점을 두고 설계되지 않은 많은 명령을 포함하여 모든 명령을 실행하는 데 사용될 수 있으므로 위험할 수 있습니다. 이러한 이유로 명령 링크는 기본적으로 비활성화되어 있으며 확장 프로그램에서 명시적으로 활성화해야 합니다.
이 모든 것을 하거나 아무것도 하지 않는 접근 방식은 효과적이지만, 보안 부담이 확장 프로그램 작성자에게 너무 많이 지워지는 것을 발견했습니다. 명령 링크를 사용해야 하는 확장 프로그램은 렌더링하는 콘텐츠에 안전한 명령만 포함되도록 유효성을 검사해야 합니다. 이는 잊기 쉽고 잘못되기 쉽습니다.
이를 개선하기 위해 명령 링크 활성화를 위한 새로운 API를 도입하여 확장 프로그램이 신뢰할 수 있는 명령의 하위 집합만 활성화할 수 있도록 합니다.
MarkdownString의 경우 isTrusted 속성은 이제 실행할 수 있는 명령의 허용 목록을 받습니다(다른 모든 명령은 차단됨).
const md = new vscode.MarkdownString(
`A command link: [Open setting](command:workbench.action.openSettings)`
);
// Set trusted commands instead of enabling all commands
md.isTrusted = { enabledCommands: ['workbench.action.openSettings'] };
웹뷰의 경우 WebviewOptions.enableCommandUris 속성은 이제 단순한 true/false 대신 활성화된 명령 목록이 될 수 있습니다.
const options: vscode.WebviewOptions = {
enableCommandUris: ['workbench.action.openSettings']
};
보안을 개선하기 위해 명령 링크를 사용하는 모든 확장 프로그램이 이 새롭고 더 제한적인 API를 채택할 것을 강력히 권장합니다.
웹뷰 및 웹뷰 보기의 일관된 출처
웹뷰의 로딩 시간을 개선하기 위해 이제 지정된 유형의 웹뷰 모든 인스턴스에 대해 일관된 출처를 유지하려고 합니다. 이는 두 가지 주요 이점을 제공합니다.
-
웹뷰는 캐싱을 더 잘 활용할 수 있습니다. 이는 로컬 리소스가 더 빠르게 로드됨을 의미합니다.
-
웹뷰는 출처별로 파티셔닝된 로컬 스토리지 및 기타 웹 API를 사용할 수 있습니다.
모든 웹뷰 인스턴스가 동일한 출처에서 실행되므로 로컬 스토리지와 같은 API를 사용하는 경우 문서별 데이터를/상태를 각 출처별로 파티셔닝해야 한다는 점을 명심하십시오. 예를 들어,
localStorage.setItem('scrollPosition', 100)은 모든 웹뷰 인스턴스에서scrollPosition을 100으로 설정합니다. 개별 리소스에 대한 스크롤 위치를 설정하려면 키에 리소스 ID를 포함해야 합니다.localStorage.setItem(myDocUri, JSON.stringify({scrollPosition: 100 })).또한 로컬 스토리지 또는 유사한 API를 사용하여 중요한 데이터(문서 내용 등)를 저장해서는 안 됩니다. VS Code는 웹뷰에 대해 일관된 출처를 유지하기 위해 최선을 다하지만 출처가 변경되지 않는다고 보장할 수는 없습니다.
대부분의 경우 웹뷰 상태 API를 사용해야 합니다. 이러한 API는 위의 두 문제를 모두 처리하기 때문입니다.
출처는 각 확장 프로그램 및 웹뷰 유형에 대해 무작위로 생성됩니다. 웹뷰의 모든 인스턴스에 동일한 출처가 사용됩니다.
현재 일반 웹뷰와 웹뷰 보기 모두 일관된 출처를 유지하려고 합니다. 다음 반복에서 사용자 지정 편집기 및 노트북 웹뷰에 대해 이를 채택할 예정입니다.
디버그 어댑터 프로토콜
새로운 'startDebugging' 역방향 요청
오늘날 VS Code는 여러 동시 디버그 세션을 지원하지만 디버그 어댑터 프로토콜(DAP)은 단일 세션만 다룹니다. 즉, 새 디버그 세션을 프로그래밍 방식으로 생성하는 것은 DAP의 일부가 아니며 DAP 또는 디버그 어댑터 외부, 일반적으로 디버그 어댑터를 포함하는 디버그 확장 프로그램에서만 수행할 수 있습니다. 결과적으로, 자식 프로세스의 자동 디버깅과 같은 다중 세션 기능은 일반적으로 디버그 어댑터만 사용하고 VS Code별 디버그 확장은 사용하지 않는 비-VS Code DAP 클라이언트에게는 쉽게 사용할 수 없습니다.
이 상황을 개선하기 위해 DAP에 새로운 역방향 요청 startDebugging을 추가하여 확장 프로그램이 디버그 어댑터 내부에서 새 디버그 세션(호출자와 동일한 유형)을 생성할 수 있도록 합니다. 클라이언트 기능 supportsStartDebuggingRequest는 디버그 어댑터에게 클라이언트가 startDebugging을 지원함을 나타냅니다.
10월 릴리스에서는 VS Code가 startDebugging을 구현했습니다.
제안된 API
모든 마일스톤에는 새로운 제안 API가 제공되며 확장 저자는 이를 시험해 볼 수 있습니다. 항상 그렇듯이 피드백을 원합니다. 제안 API를 시험해 보는 단계는 다음과 같습니다.
- 시험하고 싶은 제안을 찾아
package.json#enabledApiProposals에 해당 이름을 추가하세요. - 최신 vscode-dts를 사용하고
vscode-dts dev를 실행하세요. 그러면 해당d.ts파일이 작업 영역으로 다운로드됩니다. - 이제 제안에 대한 프로그래밍을 할 수 있습니다.
제안 API를 사용하는 확장은 게시할 수 없습니다. 다음 릴리스에서 호환성이 깨지는 변경 사항이 있을 수 있으며, 기존 확장을 깨뜨리는 일은 절대 없을 것입니다.
정적 노트북 사전 로드
새로운 notebookPreload 제안된 기여 포인트는 확장 프로그램이 특정 유형의 노트북에 로드될 스크립트를 제공할 수 있도록 합니다.
{
"contributes": {
"notebookPreload": [
{
"type": "jupyter-notebook", // Type of notebook for the preload script
"entrypoint": "./path/to/preload.js"
}
]
}
}
이 기여 포인트는 contribNotebookStaticPreloads API 제안으로 제어됩니다. 확장 프로그램은 사전 로드를 사용하여 노트북 JavaScript 환경에 전역을 로드하거나 정의할 수 있습니다.
사전 로드 스크립트는 activate 함수를 내보내는 JavaScript 모듈이어야 합니다. 모든 사전 로드는 렌더러 스크립트 전에 평가됩니다.
노트북 렌더러가 모든 출력 항목에 액세스할 수 있음
사용자 지정 노트북 렌더러는 이제 렌더링 중인 출력 항목의 모든 MIME 데이터에 액세스할 수 있습니다. 렌더러가 주 출력 항목을 제대로 렌더링할 수 없다고 판단하는 경우, 이 API 제안을 통해 대신 다른 MIME 유형 중 하나를 렌더링하도록 대체할 수 있습니다.
이 제안의 진입점은 새 OutputItem._allOutputItems 속성입니다. 이 속성은 현재 출력 항목이 포함하는 모든 MIME 유형의 순서 있는 목록입니다. 목록의 각 항목은 { mime, getItem() } 모양을 갖습니다. mime은 text/html 또는 image/png와 같은 MIME 유형이고, getItem() 함수는 해당 MIME 유형에 대한 OutputItem의 약속을 반환합니다.
다음은 렌더러가 이 새 API를 사용하는 방법입니다.
async function renderOutputItem(outputInfo, element, signal) {
const didRender = tryRenderMainItem(outputInfo, element);
if (!didRender) {
// Fallback to render `text/html`
const htmlItem = await outputInfo._allOutputItems
.find(item => item.mime === 'text/html')
?.getItem();
if (htmlItem) {
// Here we can either render the 'text/html' item ourselves
// or delegate to another renderer.
const renderer = await ctx.getRenderer('vscode.builtin-renderer');
if (renderer) {
return renderer.renderOutputItem(htmlItem, element, signal);
}
}
}
}
이 제안을 시험해 보고 의견을 알려주세요!
확장 프로그램 원격 분석 API
원격 분석 모범 사례를 더욱 발전시키고 확장 프로그램에서 사용할 수 있는 원격 분석 기능을 향상시키기 위해 이번 반복에서는 제안된 telemetryLogger API를 도입합니다. 이 API를 사용하면 확장 프로그램이 TelemetryAppender를 공급할 수 있으며, 이는 핵심 전송 로직 역할을 합니다( Application Insights 또는 다른 데이터 기록 서비스를 활용하여 구현). 이 TelemetryAppender를 사용하여 TelemetryLogger를 인스턴스화하며, 이 클래스를 통해 원격 분석을 기록해야 합니다.
TelemetryLogger는 전송된 원격 분석 이벤트를 볼 수 있는 공유 출력 채널, 올바른 원격 분석 설정 검사 및 개인 식별 정보 정리를 제공합니다. 또한 VS Code API를 사용하는 중에 발생하는 모든 오류는 더 나은 오류 진단을 위해 앱더에 기록됩니다.
원격 분석 샘플에 간단한 예제가 있으며 원격 분석 샘플에서 볼 수 있으며, 이슈 #160090에서 피드백을 제공할 수 있습니다.
로그 출력 채널
지난 마일스톤에서는 로깅에만 사용되는 출력 채널을 생성하기 위한 LogOutputChannel API 제안을 도입했습니다. 이번 반복에서는 logLevel 속성과 onDidChangeLogLevel 이벤트를 추가했습니다. logLevel 속성은 출력 채널의 현재 로그 수준을 나타내고 onDidChangeLogLevel 이벤트는 출력 채널의 로그 수준이 변경될 때 발생합니다.
/**
* A channel for containing log output.
*/
export interface LogOutputChannel extends OutputChannel {
/**
* The current log level of the channel.
* Defaults to application {@link env.logLevel application log level}.
*/
readonly logLevel: LogLevel;
/**
* An {@link Event} which fires when the log level of the channel changes.
*/
readonly onDidChangeLogLevel: Event<LogLevel>;
...
...
}
또한 애플리케이션의 현재 로그 수준을 나타내기 위해 env 네임스페이스에 logLevel 속성과 onDidChangeLogLevel 이벤트를 추가했으며, 애플리케이션의 로그 수준이 변경될 때 해당 이벤트가 발생합니다.
export namespace env {
/**
* The current log level of the application.
*/
export const logLevel: LogLevel;
/**
* An {@link Event} which fires when the log level of the application changes.
*/
export const onDidChangeLogLevel: Event<LogLevel>;
}
엔지니어링
입력 지연 시간 최적화
VS Code가 커짐에 따라 키 입력이 눌렸을 때의 활동량도 증가했습니다. 이번 반복에서는 편집기에서 입력할 때 정확히 어떤 일이 발생하는지 철저히 조사하고 키 입력이 화면에 렌더링된 후까지 연기할 수 있는 것을 살펴보았습니다. 이 탐색의 주요 결과는 다음과 같습니다.
- 편집기에서 키 입력이 화면에 렌더링된 후 최대한 많은 작업을 연기하기 위해 여러 가지 변경이 이루어졌습니다. 이 영향에 대한 대략적인 추정치는 IntelliSense가 표시되지 않을 때 입력 지연 시간을 약 15% 줄이고, IntelliSense가 다시 필터링될 때는 더 높은 감소율을 보입니다.
- 이제 입력 지연 시간을 수동으로 측정하고 이 하위 밀리초* 수준에서 최적화하는 더 정교한 기술을 갖추고 있습니다.
- 입력 지연 시간 샘플을 추적하고 보고하는 데 도움이 되는 작업 중인 변경 사항이 있습니다. 이를 통해 유지하고 개선할 수 있는 구체적인 수치를 얻을 수 있습니다.
이것은 이 노력의 시작일 뿐이며 다음 릴리스에 적용될 더 많은 변경 사항이 있습니다.
* 이 수치는 테스트에 사용되는 하드웨어에 따라 크게 달라집니다. 강력한 하드웨어에서의 0.5ms 개선은 일반적인 하드웨어에서는 2ms가 될 수 있습니다.
렌더러 자동 프로파일링
VS Code의 렌더러 프로세스는 UI를 담당합니다. 깜박이는 커서, 입력 가능성, 저장 기능을 보장합니다. 렌더러 프로세스의 성능 문제는 사용자에게 보이게 되어 좋지 않은 경험으로 이어집니다. 렌더러 프로세스의 성능 문제를 식별하고 수정하는 데 도움이 되기 위해 렌더러 프로세스를 자동으로 프로파일링하는 데 사용할 수 있는 새로운 설정 application.experimental.rendererProfiling을 추가했습니다. 이 설정은 on으로 설정하여 프로파일링을 활성화하고 off로 설정하여 비활성화할 수 있습니다. 활성화되면 렌더러 프로세스는 "압박받는 것처럼 보일 때" 몇 초 동안 프로파일링되며, 프로파일은 분석, 익명화되어 검사를 위해 전송됩니다. 창 로그를 사용하여 프로파일링 과정을 따라갈 수 있습니다.
이 기능은 아직 조정 중이므로 기본적으로 꺼져 있습니다. 시험해 보시고 의견을 알려주세요.
Windows 11 컨텍스트 메뉴
이번 릴리스에서는 VS Code 설치 프로그램이 Insiders 빌드에 대해 기본적으로 Windows 11 컨텍스트 메뉴에 Open with Code - Insiders 컨텍스트 메뉴 항목을 추가합니다. 이전에 Insiders 설치 시 컨텍스트 메뉴를 선택했던 사용자에게는, 이전 스타일 메뉴인 Shift + F10에 표시되던 항목이 최신 Insiders 빌드로 업데이트 시 새로운 항목으로 대체됩니다. 다른 사용자에게는 설치 마법사에서 이 메뉴 항목을 활성화하기 위해 Insiders를 다시 설치하고 선택해야 합니다. 메뉴 항목 개발 중 발생한 문제로 인해, Stable 릴리스의 모든 Windows 11 사용자에게 제공하기 전에 몇 가지 마일스톤 동안 Insiders 빌드에만 이 기능을 제한하여 안정성을 확보할 계획입니다.

그러면 Windows 파일 탐색기 폴더 및 파일 컨텍스트 메뉴에서 Open with Code Insiders 작업을 사용할 수 있습니다.

주요 수정 사항
- 151019 Debug hover가 마우스를 올렸을 때 숨겨짐
- 153852 제안: 확장 API 속도 향상을 위해 ES5 클래스 호환성 제거
- 156104 이미 정적으로 포워딩된 경우 url 링크 클릭 시 자동으로 포트 포워딩하지 않음
- 158921 다른 곳에서 수정됨 표시기 호버 내용이 넘침
감사합니다
마지막으로, VS Code 기여자에 대한 진심 어린 감사의 말씀을 전합니다.
이슈 추적
이슈 추적에 대한 기여
- John Murray (@gjsjohnmurray)
- Simon Chan (@yume-chan)
- Andrii Dieiev (@IllusionMH)
- ArturoDent (@ArturoDent)
- RedCMD (@RedCMD)
vscode 기여
- @andrewbranch (Andrew Branch): [typescript-language-features]
removeUnusedImports명령 추가 PR #161654 - @babakks (Babak K. Shandiz): 🐛 CWD 선택기를 표시하는 비동기 호출 수정 PR #163220
- @Balastrong (Leonardo Montini): 빈 파일에 붙여넣을 때 들여쓰기 자동 감지 PR #156282
- @Brikaa (Omar Brikaa): 가로 스크롤용 키보드 단축키 추가 PR #162992
- @CyrilOtheninGirard (Cyril OG): Bash 쉘 통합 -- PROMPT_COMMAND가 배열일 때 종료 코드를 복원하지 않음 PR #158091
- @daiyam (Baptiste Augrain): feat: 사용할 폴딩 제공자 선택 PR #157434
- @dsanders11 (David Sanders)
- 존재하지 않는
runTestsAPI 참조 수정 PR #162543 - 일치하지 않는 조각이 #top인 경우 웹뷰를 맨 위로 스크롤 PR #164070
- 존재하지 않는
- @dtivel (Damon Tivel): 확장 서명 확인 서비스 추가 PR #162285
- @gjsjohnmurray (John Murray)
outline.collapseItems추가 및 아웃라인이 예기치 않게 축소되는 문제 수정 (#_53262) PR #158650- 속성 설명에서 올바른 설정 참조 (#_162663) PR #162665
- @hughlilly (Hugh Lilly):
src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts의 설명에서 쉼표 구문 오류 수정 PR #164401 - @jacekkopecky (Jacek Kopecký)
- 저장할지 묻기 전에 저장되지 않은 편집기 확인 PR #159318
- 커서 잘못 배치된 문제 해결 PR #159325
- @jakebailey (Jake Bailey)
- typescript protocol.d.ts에 의존하지 않음 PR #163365
- typescript/lib/protocol에 대한 잊혀진 참조 제거 PR #163585
- tsserver.web.js에 'undefined'가 포함되지 않도록 함 PR #164064
- @jannisspeer: Snakefile이 Python으로 분류되는 것 제거 PR #162749
- @jeanp413 (Jean Pierre)
- 터미널 편집기를 분리해도 vscode.window.onDidCloseTerminal 이벤트가 발생하지 않는 문제 수정 PR #154546
- 단순 브라우저 웹뷰가 복원될 때 재사용되지 않는 문제 수정 PR #163389
- OSX의 특권 포트 비활성화 수정 PR #163890
- 트리 항목 레이블의 줄바꿈으로 인해 레이블을 읽을 수 없게 되는 문제 수정 PR #163995
- 확장 프로그램 비활성화 버튼 오른쪽 테두리 반경이 없는 문제 수정 PR #164109
- @joshaber (Josh Abernathy): 미리 보기 열기 사용 가능 컨텍스트 추가, 파트 2 PR #163682
- @jsjoeio (Joe Previte): fix: process.execArgv 유지 PR #161853
- @laurentlb (Laurent Le Brun): 'Feature Contributions'의 열 이름 업데이트 PR #162844
- @marrej (Marcus Revaj): # applyEdit()에 대한 올바른 응답 제공 PR #162430
- @mrienstra (Michael Rienstra): yarn 버전 강제 적용 PR #162610
- @mustard-mh (Huiwen): #161565 수정 PR #161567
- @nikita-r (Nikita R.): "WordPart" 계열 명령을 kebab-case를 존중하도록 수정 (resolves #158667) PR #158672
- @pingren (Ping): macOS에서 monaco 편집기에 대한 user-select 활성화 PR #156755
- @qingpeng9802 (Qingpeng Li):
es5ClassCompat성능 문제 해결 PR #155390 - @r3m0t (Tomer Chachamu)
- 확장 작성자가 QuickPick/InputBox에서 valueSelection을 설정할 수 있도록 허용 PR #157022
- 확장에서 테스트 항목을 업데이트할 때 테스트 트리 필터링 PR #162169
- @sean-mcmanus (Sean McManus): language-configuration.json 업데이트 PR #163182
- @stephen-ullom (Stephen Ullom): 명령 센터 트래픽 라이트 위치 수정 PR #164246
- @StephenChips (Dongcai Huang): FreePortOutputRegex 수정 PR #162323
- @unm4ever (BK0717): __vsc_prior_prompt2 추가 PR #156140
- @w1redch4d (Swapnadeep Som): 임베디드 코드의 html 스타일 주석 문제 해결 PR #160981
- @yamachig (yamachi): 자동 감싸기에서 열린 문자로 닫히는 문제 수정 PR #147187
- @yiliang114 (易良): fix: #164414 해결, 투명 전송 폴더 URI 수정 PR #164415
vscode-pull-request-github 기여
- @hoontae24: feat: 복사 머리 링크에 GitHub Enterprise에 대한 업스트림 출처 추가 PR #4028
- @Thomas1664: 검사 섹션 UI 수정 PR #4059
- @yin1999 (A1lo): fix: SSH 프로토콜 업스트림에 SSH URL 사용 PR #3853
vscode-dev-chrome-launcher에 대한 기여
- @mirdaki: 안정 또는 Insiders 빌드를 설정하는 옵션 추가 PR #20
- @infinitepower18 설명 추가 및 확장 설정의 빈 아이콘 수정 PR #18