2019년 6월 (버전 1.36)
업데이트 1.36.1: 이 업데이트는 다음 이슈들을 해결합니다.
다운로드: Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap
Visual Studio Code 2019년 6월 릴리스에 오신 것을 환영합니다. 이번 버전에는 여러분이 좋아하실 만한 여러 업데이트가 포함되어 있습니다. 주요 변경 사항은 다음과 같습니다.
- 상태 표시줄 항목 숨기기/표시 - 선호하는 상태 표시줄 항목만 표시합니다.
- 탐색기에서 들여쓰기 안내선 - 프로젝트의 폴더 구조를 명확하게 강조 표시합니다.
- 향상된 기본 셸 선택기 - 통합 터미널에서 사용할 기본 셸을 쉽게 선택할 수 있습니다.
- 순차적 작업 실행 - 작업 및 하위 작업의 실행 순서를 제어합니다.
- 커서로 이동 디버깅 - 새 위치로 이동할 때 코드 실행을 건너뜁니다.
- 디버그 콘솔 줄 바꿈 비활성화 - 디버깅 출력을 한 줄로 유지할 수 있습니다.
- JavaScript/TypeScript 야간 빌드 확장 프로그램 - 새 확장 프로그램이 JS/TS 야간 빌드를 통합합니다.
- 새로운 Java 설치 프로그램 - VS Code, Java 확장 팩 및 필요한 Java 종속성을 설치합니다.
- 원격 개발 (미리 보기) 개선 사항 - 로컬 파일 시스템에 저장, 원격으로 파일 끌어다 놓기 등.
이 릴리스 노트를 온라인으로 읽으려면 code.visualstudio.com의 업데이트로 이동하십시오.
Insider: 가능한 한 빨리 새로운 기능을 보려면? 야간 빌드인 Insider를 다운로드하고 최신 업데이트를 즉시 사용해 볼 수 있습니다. 최신 Visual Studio Code 뉴스, 업데이트 및 콘텐츠를 보려면 Twitter @code를 팔로우하세요!
워크벤치
상태 표시줄 항목 숨기기/표시
이제 상태 표시줄에 개별 항목을 숨기거나 표시하는 컨텍스트 메뉴가 있습니다.

설정은 모든 작업 영역에 걸쳐 전역적으로 유지됩니다.
참고: workbench.statusBar.feedback.visible 설정은 이 새로운 접근 방식을 위해 제거되었습니다. 상태 표시줄 컨텍스트 메뉴를 사용하여 피드백 스마일리 아이콘을 숨길 수 있습니다.
탐색기에서 들여쓰기 안내선
트리 위젯이 이제 들여쓰기 안내선을 지원합니다. 즉, 파일 탐색기, 검색 보기, 디버그 보기 등에서 들여쓰기 안내선을 사용할 수 있습니다.

이전과 마찬가지로 workbench.tree.indent 설정을 사용하여 트리의 들여쓰기 수준을 제어할 수 있으며, 이제 workbench.tree.renderIndentGuides 설정을 사용하여 들여쓰기 안내선의 동작 방식도 제어할 수 있습니다.
workbench.tree.renderIndentGuides의 가능한 값은 다음과 같습니다.
onHover- 트리 위에 마우스를 올리면 들여쓰기 안내선이 표시됩니다. 기본 동작입니다.always- 트리에서 항상 들여쓰기 안내선이 표시됩니다.none- 들여쓰기 안내선을 표시하지 않습니다.
폴더를 끌어다 놓아 복사
이제 VS Code 외부에서 폴더를 파일 탐색기로 끌어다 놓아 복사할 수 있습니다. 이전에는 폴더를 VS Code 탐색기로 놓으면 항상 해당 폴더를 포함하는 작업 영역을 열었지만, 이제는 폴더 내용을 복사할 수 있습니다.

복사 붙여넣기 파일 이름 증가 변경
VS Code 탐색기 내에서 중복된 파일 및 폴더를 복사하여 붙여넣을 때 VS Code는 붙여넣은 파일의 이름을 증가시킵니다. 이름을 증가시키는 방식이 때때로 예상치 못한 결과를 초래했습니다.
이름 지정 방식을 단순화하기 위해 이제 파일 이름을 다음과 같이 증가시킵니다.
"hello.txt" -> "hello copy.txt" -> "hello copy 2.txt" -> "hello copy 3.txt"
사용자 지정 메뉴 모음의 Alt 키 포커스 비활성화
많은 사용자들이 Alt 키를 누를 때 사용자 지정 메뉴 모음에 포커스가 가는 동작을 비활성화해 달라고 요청했습니다. 이 동작을 방지하려면 새 설정인 window.customMenuBarAltFocus를 false로 설정하십시오.
미니맵 검색 장식
파일 내에서 검색할 때 결과 일치가 파일 내부와 미니맵 모두에서 강조 표시됩니다.

경고 색상 업데이트
list.warningForeground 및 editorWarning.foreground 색상을 업데이트하여 편집기의 다른 경고 색상과 더 잘 일치하도록 했습니다. 파일 탐색기, 미리 보기 오류 보기 및 편집기 물결선에서 업데이트된 색상을 볼 수 있습니다.

또한 editorOverviewRuler.findMatchForeground 색상을 업데이트하여 눈금자에서 업데이트된 경고 색상과 더 잘 대비되도록 했습니다.

온라인 서비스 설정
VS Code는 제품 업데이트 다운로드, 확장 프로그램 검색, 설치 및 업데이트, 설정 편집기 내 자연어 검색 제공 등 다양한 목적으로 온라인 서비스를 사용합니다. @tag:usesOnlineServices 태그로 필터링할 수 있는 사용자 설정을 통해 이러한 서비스를 사용하는 기능을 켜거나 끌 수 있습니다. 이제 설정 편집기에 태그를 적용하는 파일 > 기본 설정 > 온라인 서비스 설정 명령이 있습니다.

더 자세한 내용은 텔레메트리 문서를 참조하십시오.
통합 터미널
향상된 기본 셸 선택기
Windows에는 오랫동안 **기본 셸 선택** 명령이 있었고 지난 릴리스에서는 통합 터미널 드롭다운 메뉴에 추가되었습니다. 이 명령은 이제 macOS 및 Linux에서도 사용할 수 있으며 /etc/shells 파일을 읽어 시스템에 등록된 셸을 노출합니다.

깨끗한 환경으로 터미널 시작
VS Code의 통합 터미널은 특히 Linux 및 macOS에서 일반 터미널과 다르게 작동했습니다. 그 이유는 환경이 항상 VS Code 창(인스턴스)에서 상속되었고 VS Code/Electron 관련 환경 변수는 제거되었지만, 일반 터미널은 일반적으로 Dock/시작 메뉴에서 시작되어 시스템 환경을 사용했습니다. 이는 특정 시나리오에서 문제를 야기할 수 있었습니다. 예를 들어 Python 가상 환경은 $PATH 변수를 사용하는 방식 때문에 손상되었습니다.
새로운 미리 보기 옵션인 terminal.integrated.inheritEnv가 있으며, 이 값이 false이면 터미널이 VS Code의 환경을 사용하지 않습니다.
대신 플랫폼에 따라 다음을 수행합니다.
- Linux: VS Code의 "메인 프로세스"의 부모 프로세스 환경을 가져와 사용합니다.
- macOS: 현재 환경에서 몇 가지 중요한 환경 변수를 가져와 포함합니다. 궁극적으로 macOS가 Linux와 동일하게 작동하기를 바라지만, 현재 환경을 가져오는 데 문제가 있습니다.
- Windows: 현재 이 설정은 Windows에 영향을 미치지 않습니다.
inheritEnv를 false로 설정했을 때의 주요 시각적 결과는 $SHLVL(셸 레벨)이 1이 되어야 하고, 시작 스크립트에 의도적으로 포함하지 않는 한 $PATH에 중복 경로가 포함되지 않아야 한다는 것입니다.
terminal.integrated.inheritEnv의 기본값은 이전 동작인 true이지만, 향후 false로 변경될 가능성이 높습니다.
Ctrl+\ 변경
이전에는 Ctrl+\이 Linux 및 Windows에서 터미널을 분할하는 명령에 매핑되었지만, 대부분의 사람들이 예상하는 대로 SIGQUIT를 셸로 전달하도록 변경되었습니다. 이전 동작을 원하면 keybindings.json 파일에 다음 키 바인딩을 추가할 수 있습니다.
{
"key": "ctrl+\\",
"command": "workbench.action.terminal.split",
"when": "terminalFocus"
}
작업
순차적 작업 실행
dependsOn 작업 속성은 여전히 모든 종속성을 병렬로 실행하는 것을 기본값으로 하지만, 이제 "dependsOrder": "sequence"를 지정하여 작업 종속성을 dependsOn에 나열된 순서대로 실행할 수 있습니다. dependsOn에서 사용되는 백그라운드/감시 작업은 완료 시점을 추적하는 문제 발생기(problem matcher)를 가져야 합니다.
아래 예제 작업은 작업 Two, 작업 Three, 그리고 작업 One을 실행합니다.
{
"label": "One",
"type": "shell",
"command": "echo Hello ",
"dependsOrder": "sequence",
"dependsOn": ["Two", "Three"]
}
문제 발생기 경로 감지
작업 출력이 문제에 대해 스캔될 때 경로에 대한 정보는 fileLocation 문제 발생기 속성을 사용하여 제공됩니다. 기존 relative 및 absolute 옵션 외에도 이제 autoDetect를 지정할 수 있습니다. autoDetect를 사용할 때 작업 시스템은 문제의 경로가 상대적인지 절대적인지 자동으로 결정하려고 시도합니다.
언어
TypeScript 3.5.2
이 릴리스에는 TypeScript 3.5.2가 포함되어 있으며, 이는 몇 가지 중요한 버그를 수정한 작은 업데이트입니다.
JavaScript 및 TypeScript의 구문 전용 기능 더 빠르게 사용
VS Code의 JavaScript 및 TypeScript 언어 기능은 TypeScript 서버에 의해 구동됩니다. 이 서버는 IntelliSense 및 오류 보고와 같은 복잡한 기능뿐만 아니라 코드 접기 및 문서 개요와 같은 간단한 기능도 지원합니다.
IntelliSense와 같은 기능은 TypeScript 서버가 전체 JavaScript 또는 TypeScript 프로젝트를 평가해야 결과를 반환할 수 있으며, 이는 대규모 프로젝트의 경우 시간이 걸릴 수 있습니다. 이 처리가 진행되는 동안 서버는 코드 접기 또는 문서 개요가 준비될 때까지의 지연을 경험한 적이 있다면 이 문제를 봤을 수도 있는 코드 접기와 같은 간단한 기능에 대한 요청을 포함하여 다른 요청을 처리할 수 없습니다.
코드를 더 빠르게 작업할 수 있도록, VS Code가 간단한 구문 기반 작업만 처리하는 TypeScript 서버와 프로젝트 처리, IntelliSense, 오류 보고 및 기타 고급 언어 기능을 처리하는 완전한 TypeScript 서버의 두 가지 TypeScript 서버를 사용하는 실험적인 옵션을 추가했습니다. 이 동작을 활성화하려면 "typescript.experimental.useSeparateSyntaxServer": true로 설정하십시오. 이 설정은 작업 영역에서 TypeScript 3.4 이상을 사용해야 합니다.
디버깅
커서로 이동
실행 코드 중간을 건너뛰고 프로그램 실행을 새 위치로 이동할 수 있는 새로운 디버그 명령 **커서로 이동**을 추가했습니다. **커서로 이동**이 디버거에서 지원되는 경우, 디버깅 중에 편집기 컨텍스트 메뉴 및 명령 팔레트에 새 명령이 나타납니다. 현재 이 명령은 C# 확장 프로그램에서만 사용할 수 있지만, 곧 다른 디버그 확장 프로그램에서도 지원될 것으로 예상됩니다.

디버그 콘솔 줄 바꿈 비활성화
새로운 설정 debug.console.wordWrap은 디버그 콘솔에서 줄 바꿈을 사용할지 여부를 제어합니다. 기본적으로 모든 줄이 줄 바꿈됩니다. 설정을 끄면 디버그 콘솔에서 줄이 더 이상 끊어지지 않고 가로 스크롤 막대가 표시됩니다.
Node.js 디버그 구성 속성 useWSL이 더 이상 사용되지 않음
VS Code에 WSL 확장 프로그램과 함께 통합 Linux 서브시스템 (WSL) 지원이 제공됩니다. 이제 모든 확장 프로그램을 WSL에서 원활하게 사용할 수 있습니다.
이에 따라 VS Code의 Node.js 디버거에 2년 전에 추가했던 더 이상 사용되지 않는 WSL 지원을 제거할 계획입니다. 이 목표를 향한 첫 번째 단계로, useWSL 디버그 구성 속성을 사용 중단합니다. 이 마일스톤부터 속성을 편집기에서 launch.json 파일을 열 때 밑줄이 표시됩니다. 또한 useWSL을 포함하는 디버그 세션이 시작될 때 알림이 표시됩니다.
useWSL 플래그를 사용하는 기존 프로젝트를 WSL 확장 프로그램을 사용하여 디버깅하도록 마이그레이션하는 단계는 다음과 같습니다.
- WSL 확장 프로그램이 설치되어 있는지 확인하십시오.
- VS Code에서 프로젝트 폴더를 엽니다.
- WSL: WSL에서 폴더 다시 열기 명령을 사용하여 프로젝트를 WSL에서 다시 엽니다.
- Ctrl+F5를 누릅니다.
- 디버그 구성에서
useWSL플래그를 제거합니다.
자세한 내용은 WSL에서 개발하기 문서를 참조하십시오.
확장 프로그램 기여
JavaScript 및 TypeScript 야간 확장 프로그램
새로운 JavaScript 및 TypeScript 야간 확장 프로그램은 VS Code의 내장 TypeScript 버전에 대한 야간 빌드(typescript@next)를 사용하여 JavaScript 및 TypeScript IntelliSense를 지원합니다. 이를 통해 최신 TypeScript 기능을 쉽게 테스트하고 피드백을 제공할 수 있습니다!
TSLint 1.2
몇 가지 중요한 버그를 수정한 TSLint 확장 프로그램의 새 버전을 게시했습니다. 또한 이 릴리스에서는 작업 영역에 tslint.json 파일이 있지만 TSLint 자체는 제대로 설치되지 않은 경우 VS Code 상태 표시줄에 경고 표시기가 추가됩니다.
Java 개발자를 위한 설치 프로그램
처음 Java 개발을 시작하는 개발자가 Java 환경을 설정할 수 있도록 새로운 Visual Studio Code Java 설치 프로그램이 있습니다. Java Pack 설치 프로그램을 실행하면 JDK(Java Development Kit), Visual Studio Code 및 필요한 확장 프로그램이 이미 설치되어 있는지 자동으로 감지합니다. 설치되지 않은 경우 설치 프로그램에서 누락된 종속성을 다운로드하고 구성할 수 있습니다. 또한 설치 프로그램을 사용하여 기존 Visual Studio Code 설치에 Java 관련 구성 요소를 추가할 수 있습니다.

Java 확장이 설치되면 Visual Studio Code는 지능적인 코드 완성, 리팩터링, 디버깅, 테스트 및 프로젝트 관리와 애플리케이션 서버 통합과 같은 포괄적인 Java 개발 기능을 제공합니다.
원격 개발 (미리 보기)
컨테이너, 원격 머신 또는 Windows Subsystem for Linux(WSL)를 전체 기능 개발 환경으로 사용할 수 있게 해주는 원격 개발 확장 프로그램에 대한 작업이 계속되었습니다. 새 확장 프로그램 기능 및 버그 수정은 원격 개발 릴리스 노트에서 확인할 수 있습니다.
또한 Windows에서 Linux 애플리케이션을 개발하는 방법에 대한 자세한 내용은 Windows 개발자 플랫폼 팀의 WSL 및 Visual Studio Code 원격을 사용하여 Windows에서 Linux 개발 환경을 한 단계 더 발전시키는 방법 블로그 게시물을 참조하십시오.
Chrome 디버거를 원격 UI 확장으로 사용
원격 창에서 웹 프로젝트를 작업하는 경우 Chrome 디버거 확장 프로그램을 사용하여 로컬 Chrome 창에서 디버깅할 수 있습니다. 확장 프로그램을 설치하고, 원격에서 개발 서버를 시작하고, 서버 포트를 전달한 다음, 시작 구성을 시작하기만 하면 됩니다. 자세한 내용은 확장 프로그램 README를 참조하십시오.
확장 프로그램 작성
vscode 패키지를 @types/vscode와 vscode-test로 분할
작년 event-stream 사건 동안 223개의 전이 종속성을 가진 vscode 패키지가 event-stream을 포함하고 있어 영향을 받았다는 것을 알게 되었습니다. 이러한 종속성은 많은 VS Code 확장 프로그램에 대해 GitHub 보안 경고를 주기적으로 발생시키기도 합니다. 종속성 복잡성을 해결하기 위해 vscode 패키지를 축소하기 시작했습니다.
vscode 패키지는 두 가지 목적을 수행했습니다.
- 확장 개발을 위해
vscode.d.ts를 가져옵니다. - 로컬 VS Code 복사본을 다운로드하고 시작하여 통합 테스트를 실행합니다.
이제 vscode를 더 집중된 기능을 가진 두 개의 패키지인 @types/vscode 및 vscode-test로 분할합니다.
@types/vscode에는 각 릴리스에 대한vscode.d.ts가 포함됩니다. 예를 들어npm i @types/vscode@1.34.0은 VS Code 1.34 Extension API를 설치합니다.postinstall스크립트를 통해vscode.d.ts를 가져오는vscode와 달리, 이 패키지는 패키지 관리자에 의해 완전히 캐시될 수 있습니다.vscode-test는 VS Code로 통합 테스트를 실행하기 위한 API 집합을 제공합니다. 이전vscode패키지는 계속 작동하지만, 새로운 기능은vscode-test로만 제공됩니다. 종속성 그래프가 더 얇고 API가 더 유연하며 명시적으로 문서화된vscode-test로 전환하는 것이 좋습니다.vscode-test사용에 대한 자세한 내용은 확장 프로그램 테스트 문서를 참조하십시오.
추가적으로
vscode-dts를 사용하면 CLI를 통해 VS Code API의 모든 버전을 빠르게 다운로드할 수 있습니다.vsce는 이제@types/vscode버전을engines.vscode와 비교하여 이전 버전의 VS Code와 호환되지 않는 새 API를 사용하지 못하도록 방지합니다.helloworld-test-sample, 확장 프로그램 테스트 페이지 및 지속적 통합 페이지가vscode-test를 사용하도록 업데이트되었습니다.- 확장 프로그램 테스트 페이지에는
vscode에서@types/vscode및vscode-test로 전환하는 데 도움이 되는 마이그레이션 가이드가 있습니다. - 모든 VS Code 샘플 확장 프로그램은 이제
@types/vscode를 사용합니다. - VS Code 확장 프로그램 생성기는
@types/vscode및vscode-test패키지를 사용하여 확장 프로그램을 스캐폴딩합니다.
Node.js 업데이트
VS Code가 실행되는 Electron 버전이 업데이트되어 Node.js 버전도 10.2.0에서 10.11.0으로 업데이트되었습니다. 모든 확장 프로그램은 이제 이 최신 버전의 Node.js에서 실행됩니다.
원격 API
원격 확장 호스트가 실행될 때 정의되는 새 속성 vscode.env.remoteName이 있습니다. 이 값은 원격 확장 호스트를 부트스트랩하는 확장 프로그램에 의해 정의되며, 로컬 및 원격 확장 호스트 모두에서 사용할 수 있습니다.
확장이 원격 또는 로컬 확장 호스트에서 실행되는지 여부를 알아야 하는 확장 프로그램은 ExtensionKind.UI 또는 ExtensionKind.Workspace인 Extension#extensionKind를 사용할 수 있습니다. 이 값은 확장 프로그램의 package.json 파일에 정의된 값 또는 사용자가 재정한 값을 나타냅니다. 원격 확장 호스트가 없는 경우 값은 항상 ExtensionKind.UI입니다.
DocumentLink.tooltip
새로운 DocumentLink.tooltip 속성을 통해 DocumentLinkProvider는 사용자가 문서 링크 위에 마우스를 올렸을 때 표시되는 텍스트를 사용자 정의할 수 있습니다.

VS Code에는 링크를 활성화하는 방법(예: 위 예시에서 cmd + 클릭)과 tooltip 텍스트에 대한 지침이 포함되어 있습니다.
포트 포워딩 및 포트 매핑이 이제 'localhost' 외에 '127.0.0.1'도 지원합니다.
vscode.env.openExternal API는 기본 외부 애플리케이션을 사용하여 URI를 엽니다. 원격 확장 프로그램이 로컬 URI(예: https://:8080)에서 openExternal을 호출하면, VS Code는 자동으로 로컬 머신의 포트를 원격 머신의 열린 포트와 연결하는 터널을 엽니다. 이전에는 이 자동 터널링이 'localhost' URI에만 적용되었지만, 이제는 '127.0.0.1'에도 적용됩니다.
또한, 웹뷰 포트 매핑 API는 이제 'localhost' URI 외에 '127.0.0.1'도 처리합니다.
더 많은 속성이 readonly 또는 ReadonlyArray로 표시됨
VS Code API의 더 많은 속성이 이제 vscode.d.ts에서 readonly로 표시되어 확장 프로그램에 대한 의도를 더 잘 표현합니다.
주요 변경 사항은 다음과 같습니다.
- 이벤트 인터페이스의 모든 필드가 이제 readonly입니다. 동일한 객체가 여러 리스너에 전달될 수 있으므로 이벤트 객체는 절대 수정해서는 안 됩니다.
DiagnosticCollection의 메서드는 이제 readonly 배열을 받습니다. 이 변경은DiagnosticCollection을 해당 메서드를 통해서만 업데이트할 수 있고, 이전에 전달된 배열을 수정하여 업데이트할 수 없기 때문에 이루어졌습니다.Extensions.all은 수정할 수 없으므로 이제 readonly 배열입니다.TextEditor.insertSnippet은 매개변수를 수정하지 않으므로 이제 readonly 배열을 받습니다.
이러한 새 readonly 한정자는 VS Code API가 이전에 사용했던 비-readonly 타입을 명시적으로 타이핑한 확장 프로그램 코드에 대해 컴파일 오류를 유발할 수 있습니다.
vscode.window.onDidChangeTextEditorSelection(e => {
// Error: `e.selections` is now a readonly array but
// our `updateForSelections` function takes a mutable array
updateForSelections(e.selections);
});
function updateForSelections(selections: vscode.Selection[]) {
...
}
이를 해결하려면 확장 프로그램의 소스 코드에서도 readonly 한정자를 전파하십시오.
vscode.window.onDidChangeTextEditorSelection(e => {
updateForSelections(e.selections);
});
function updateForSelections(selections: readonly vscode.Selection[]) {
...
}
TerminalOptions.hideFromUser
runInBackground 터미널의 hideFromUser 옵션이 이제 안정적인 API에 포함되었습니다. 이 옵션을 사용하여 Terminal.show()가 호출될 때까지 터미널을 사용자에게 완전히 숨길 수 있습니다.
const term = window.createTerminal({ hideFromUser: true });
term.sendText('do something');
sendText 및 onDidWriteData API와 결합하여, 예를 들어 연결을 설정하고 문제가 발생하는 경우에만 Terminal.show()를 호출하는 등 대화형 터미널과 상호 작용하는 것이 확장 프로그램에서 가능합니다.
댓글 반응
댓글 API는 이제 댓글에 대한 사용자 반응을 표시하고 관리하는 것을 지원합니다. Comment.reactions가 있으면 댓글 본문 아래에 반응이 렌더링됩니다.
확장 프로그램이 CommentController.reactionHandler를 사용하여 반응 핸들러를 등록하면, 사용자는 기존 반응에 응답하거나 반응 피커를 사용하여 새 반응을 만들 수 있습니다.

제안된 확장 API
각 마일스톤에는 새로운 제안 API가 포함되며 확장 작성자는 이를 시험해 볼 수 있습니다. 언제나처럼 여러분의 피드백을 기다립니다. 제안된 API를 시험해 보려면 다음 단계를 따르세요.
- 제안된 API는 자주 변경되므로 Insiders를 사용해야 합니다.
- 확장의
package.json파일에 이 줄이 있어야 합니다:"enableProposedApi": true. - 최신 버전의 vscode.proposed.d.ts 파일을 프로젝트로 복사하세요.
제안된 API를 사용하는 확장은 게시할 수 없습니다. 다음 릴리스에서 호환되지 않는 변경이 발생할 수 있으며 기존 확장에 문제가 발생하는 것을 원하지 않습니다.
vscode.workspace.fs
확장 프로그램이 파일 시스템 공급자와 상호 작용할 수 있도록 제안된 API가 있습니다. 이 API를 사용하면 확장 프로그램이 임의 파일 시스템에서 파일 및 폴더를 생성, 읽기, 쓰기, 삭제할 수 있습니다. 예를 들어, 언어 확장 프로그램은 이제 ftp 서버 또는 다른 원격 소스에서 제공하는 소스 파일을 로드할 수 있습니다.
API는 작업 영역 객체의 새 속성인 vscode.workspace.fs를 통해 액세스됩니다. 사용해 보고 #48034 이슈에 자유롭게 피드백을 남겨주십시오.
코드 인셋에 대한 API 업데이트
코드 인셋 제안을 리팩터링하고 단순화했습니다. 공급자 패턴을 사용하는 대신 이제 텍스트 장식 API와 더 유사합니다.
export function createWebviewTextEditorInset(
editor: TextEditor,
line: number,
height: number,
options?: WebviewOptions
): WebviewEditorInset;
편집기, 줄 및 높이가 주어지면 인셋을 만들 수 있습니다. 인셋은 WebviewPanel에서 이미 알고 있는 Webview를 사용합니다. 장식과 마찬가지로 인셋은 포함하는 편집기가 닫히면 폐기됩니다.
Webview.resourceRoot
웹뷰의 제안된 resourceRoot 상수는 웹뷰에서 로컬 리소스가 로드되는 루트를 노출합니다.
const panel = vscode.window.createWebviewPanel(
CatCodingPanel.viewType,
'Cat Coding',
vscode.ViewColumn.One,
{
// Restrict the webview to only loading local content from our extension's `media` directory.
localResourceRoots: [vscode.Uri.file(path.join(extensionPath, 'media'))]
}
);
const resourceRoot = await panel.resourceRoot;
panel.html = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ${resourceRoot} https:;">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cat Coding</title>
</head>
<body>
<img src="${resourceRoot}/${path.join(extensionPath, 'media')}/cat.gif" width="300" />
</body>
</html>`;
VS Code가 데스크톱에서 실행될 때 resourceRoot는 vscode-resource:가 됩니다. 그러나 브라우저와 같은 다른 환경에서 VS Code가 실행될 때는 값이 다를 수 있습니다.
기본 셸을 가져오는 API
terminal.integrated.shell.<platform> 설정이 이제 null을 기본값으로 사용하므로, 확장 프로그램은 더 이상 해당 설정을 사용하여 기본 셸을 감지할 수 없습니다. 이제 터미널에 대한 기본 셸을 반환하는 제안된 API vscode.env.shell이 있습니다.
const shell = vscode.env.shell;
if (shell.search(/(powershell|pwsh)/i) !== -1) {
// Do something special that PowerShell needs
}
언어 서버 프로토콜
TypeScript용 언어 서버 인덱스 형식 도구의 새 버전이 구현되었습니다. 새 버전은 대량 덤프를 데이터베이스로 쉽게 가져올 수 있도록 개선된 형식을 갖추고 있으며 데이터베이스별이지 않습니다. 이러한 도구를 실행하는 방법에 대한 자세한 내용은 lsif-node 리포지토리의 지침을 참조하십시오.
엔지니어링
Electron 4.0 업데이트 및 Electron 6.0 탐색
이 마일스톤에서 Electron 4를 VS Code에 번들링하는 탐색을 완료하여, 이 Electron 버전이 안정 버전으로 출시된 첫 번째 사례가 되었습니다. 이는 주요 Electron 릴리스이며 Chrome 69 및 Node.js 10.11.0(현재 버전인 Chrome 66 및 Node.js 10.2.0에서 큰 도약)과 함께 제공됩니다.
안타깝게도 이슈 #75054로 인해 한 릴리스 동안 macOS 단순 전체 화면 지원("window.nativeFullScreen": false)을 비활성화해야 했습니다. 다음 달 초 Insiders 빌드에 수정 사항을 포함할 것으로 예상합니다.
곧 Insiders에 출시될 것으로 기대하는 Electron 6으로의 업데이트를 탐색하기 시작했습니다.
더 나은 코드 로딩
Electron 4는 새로운 스크립트 캐싱 API에 대한 액세스를 제공했습니다. 새로운 캐싱 API를 사용하면 매우 첫 번째 시작 시간에 영향을 주지 않고 캐시된 데이터를 생성할 수 있으며, 지연 파싱된 함수를 포함하도록 반복적으로 생성될 수 있습니다. 이와 로더의 개선으로 코드 로딩 속도가 약 15% 빨라졌습니다.
Linux 32비트 지원 종료
VS Code는 여러 플랫폼에서 실행하기 위해 Electron 프레임워크를 사용합니다. 이 릴리스에서는 Electron 버전 4.x로 이동하므로 VS Code는 더 이상 Linux 32비트에서 실행되지 않습니다. 64비트 버전의 VS Code로 업데이트하십시오. 모든 설정과 확장 프로그램은 마이그레이션할 필요 없이 이전과 같이 작동합니다. 자세한 내용은 Electron의 관련 블로그 게시물을 참조하십시오.
iframe 기반 웹뷰 탐색
이번 반복에서 VS Code의 웹뷰를 구현하기 위해 Electron의 <webview> 태그 대신 일반 iframe을 사용하는 것을 탐색했습니다. 이 작업은 주로 브라우저에서 VS Code를 실행하는 것을 지원하기 위해 수행되고 있지만, <webview>는 상당히 복잡하며 과거에 우리에게 문제를 일으켰습니다. 궁극적으로 <webview> 사용을 일반 iframe으로 교체할 수 있기를 바랍니다.
iframe 기반 웹뷰에 대해 상당한 진전을 이루었으며 이제 브라우저에서 확장 프로그램의 많은 웹뷰를 성공적으로 실행할 수 있지만, 아직 작업할 부분이 많이 남아 있습니다. 7월에도 이 탐색을 계속할 것입니다.
주요 수정 사항
- 41356: 다음/이전 오류로 이동하는 핫키가 NVDA의 초점을 편집기 외부로 이동시키지 않아야 함
- 45515: Uri#parse가 경로 구성 요소를 망가뜨릴 수 있음
- 54084: 디버깅 시 변수 창의 터치 바 버튼 위치를 변경하지 않음
- 70248: cls 명령이 터미널을 지우지 않음 (Windows 10 1903, ConPTY)
- 74710: 이미지 미리 보기에서는 이미지 크기만큼만 "투명" 체크 무늬 배경을 그려야 함
- 75359: 디버그 콘솔을 통해 값을 변경한 후 변수 창이 업데이트되지 않음
- 41085: Git: .git이 열린 폴더 외부에 있을 경우 파일 이벤트가 작동하지 않음
감사합니다
마지막으로, VS Code를 더욱 발전시키는 데 도움을 준 다음 분들께 진심으로 감사드립니다.
vscode 기여
- Abby (@abbychau): Git 초기화 또는 복제 후 새 창에서 열기 옵션 추가 PR #69763
- Andrius (@andrius-pra): TypeScript 플러그인에서 제공하는 언어 동기화 PR #75371
- Aurélien Pupier (@apupier): package.jsons에 라이선스 필드 추가 #68423 PR #68771
- Jakub Čábera (@Ash258): shellscript: 접기 마커 추가 PR #75828
- Lee Houghton (@asztal): /tmp/vscode-typescript를 사용하는 여러 사용자 처리 PR #75547
- Babak K. Shandiz (@babakks): SCM 패널에
cachedScrollTop추가 PR #74723 - Patrick Burke (@burknator): 상태 줌 버튼을 IStatusbarEntry로 만듦 #74454 PR #75618
- Chase Adams (@chaseadamsio): 빠른 입력/빠른 열기 테마 지원 PR #74041
- Christian Oliff (@coliff): EditorConfig 확장 프로그램 설치를 사용자에게 권장 PR #75391
- Hung-Wei Hung (@hwhung0111): 주석에서 일부 오타 수정 PR #75565
- Jean Pierre (@jeanp413)
- Jonas Kemper (@jk21): Package json 정보 PR #72763
- @malingyan2017: 도크의 최근 목록에 최근 파일/폴더가 표시되지 않는 문제 수정 #74788 PR #75108
- Denis Stepanov (@meduzik): 실행 명령의 빈 인수도 이제 제대로 이스케이프 처리됨 PR #25098
- Micah Smith (@Olovan): 문제 #35245 수정 PR #75357
- @orange4glace
- Jesse Mazzella (@ozyx): baseFolderName에 대한 repo URL에서 후행 '/' 제거 PR #75822
- Alasdair McLeay (@penx): CSS import에 대한 Node 모듈 해석 PR #70693
- Raul Piraces Alastuey (@piraces): 마법사가 무음 모드로 실행 중일 때 MsgBox 억제 PR #76215
- Remco Haszing (@remcohaszing)
- Evgeny Zakharov (@risenforces): window.disableMenuBarAltBehavior 옵션 추가 PR #73258
- Samuel Bronson (@SamB): 오타 수정: timemout -> timeout PR #75162
- TBK (@TBK): APKBUILD 지원 추가 PR #75706
- Tomáš Chaloupka (@tchaloupka): 체코어에 대한 LANG env var 수정 PR #75519
- Tony Xia (@tony-xia)
- Waldir Pimenta (@waldyrious): 예제 약어(예:)의 철자 수정 PR #74785
이슈 추적에 대한 기여
- John Murray (@gjsjohnmurray)
- Alexander (@usernamehw)
- Eric Amodio (@eamodio)
- Jean Pierre (@jeanp413)
- Danny Tuppeny (@DanTup)
수신되는 이슈를 관리하는 데 도움이 되고 싶으시면 커뮤니티 이슈 추적 페이지를 참조하세요.
vscode-css-languageservice에 대한 기여
- Dmitry Parzhitsky (@parzh): 의사 요소 특정성 수정 PR #154
vscode-html-languageservice에 대한 기여
- Liam Newman (@bitwiseman): js-beautify를 1.10.0으로 업데이트 PR #61
- Javey (@Javey): uglify-js로 압축 가능하게 함 PR #64
language-server-protocol 기여
- Danny Tuppeny (@DanTup): 오타 수정 "must not sent" -> "must not send" PR #747
debug-adapter-protocol에 기여
- Joel Day (@joelday): Papyrus 구현 추가 PR #59
vscode-azurecli에 대한 기여
- Matthew Burleigh (@mburleigh): 결과를 새 편집기에서 열기 PR #55
- Matthew Burleigh (@mburleigh): 진행률 표시를 위한 상태 표시줄 항목 추가 PR #56
vscode-vsce 기여
- @atsutton: 로그 레벨을 info로 변경. PR #369
- James George (@jamesgeorge007)
- Jonathan Nagy (@nagytech): 커밋 메시지 지정 가능 PR #365
vscode-recipes에 기여
- Mladen Mihajlović (@mika76): Vue - 이슈에서 수집한 정보로 readme 업데이트 PR #213
- Ephraim Khantsis (@doom777): ng-test 실행 구성 업데이트 PR #212
localization 기여
Microsoft Localization Community Platform (MLCP)를 사용하는 800명 이상의 클라우드 + AI 현지화 커뮤니티 회원이 있으며, Visual Studio Code에 약 100명의 활성 기여자가 있습니다. 새로운 번역 제공, 번역 투표 또는 프로세스 개선 제안 등 기여해주신 모든 분들께 감사드립니다.
다음은 기여자의 스냅샷입니다. 프로젝트에 대한 자세한 내용과 기여자 이름 목록을 보려면 프로젝트 사이트(https://aka.ms/vscodeloc)를 방문하십시오.
- 보스니아어: Ismar Bašanović, Ernad Husremovic.
- 불가리아어: Иван Иванов, Gheorghi Penkov.
- 체코어: Tadeáš Cvrček, Michal Franc, Jan Kos, Radim Hampl.
- 덴마크어: René Pape, Lars Vange Jørgensen, Martin Liversage, Lasse Stilvang, Anders Lund, Allan Kimmer Jensen, Anton Ariens.
- 네덜란드어: Leroy Witteveen, Luc Sieben, Maxim Janssens, Damien van Gageldonk, Tom Meulemans.
- 영어(영국): Martin Littlecott, Alexander Ogilvie, Fabio Zuin, Mohit Nain, Sulkhan Ninidze, alshyab wa3ed, Tejas kale.
- 핀란드어: Lasse Leppänen, Petri Niinimäki, Sebastian de Mel.
- 프랑스어: Antoine Griffard, Thierry DEMAN-BARCELÒ.
- 독일어: Julian Pritzi, Patrick Burke, Ettore Atalan, Meghana Garise.
- 그리스어: Θοδωρής Τσιρπάνης, Charalampos Fanoulis, Vassilis Vouvonikos.
- 히브리어: חיים לבוב, Eyal Ellenbogen.
- 힌디어: Sanyam Jain, Kishan K.
- 헝가리어: Boldi Kemény.
- 중국어 간체: 斌 项, paul cheung, 张锐, Yizhi Gu, Yiting Zhu, Justin Liu, Shi Liu, Pluwen, Joel Yang, Jieting Xu, Chen Yang, 涛 罗, 立飞 李, 雨齐 刘, cuibty wong, 建 周, XIANG ZUO.
- 중국어 번체: LikKee 沥祺 Richie, Winnie Lin, Jeremy.
- 인도네시아어: Jakka Prihatna, Arif Fahmi, Septian Adi, Heston Sinuraya, Hendra Widjaja, Don Nisnoni, Eriawan Kusumawardhono, Bervianto Leo Pratama, Laurensius Dede Suhardiman, Rifani, rsyad, Christian Elbrianno.
- 이탈리아어: andrea falco, Aldo Donetti.
- 일본어: Michihito Kumamoto, Yoshihisa Ozaki, Aya Tokura, TENMYO Masakazu, 太郎 西岡.
- 한국어: Hongju, 우현 조, Hoyeon Han, Hong Kwon.
- 라트비아어: Kaspars Bergs, Andris Vilde.
- 리투아니아어: Andrius Svylas, Tautvydas Derzinskas, Karolis Kundrotas, Martynas J..
- 노르웨이어: Dag H. Baardsen, Ole Kristian Losvik.
- 폴란드어: Rafał Całka, Marcin Weksznejder, Jakub Żmidziński, Rafał Wolak, Szymon Seliga, Grzegorz Miros.
- 포르투갈어(브라질): Alessandro Trovato, Thiago Dupin Ugeda, Weslei A. de T. Marinho, Rafael Lima Teixeira, Gerardo Magela Machado da Silva, Marcos Albuquerque, Loiane Groner, Alessandro Fragnani, Judson Santiago, Andrei Bosco, Fábio Corrêa, Roberto Fonseca, Fabio Lux, Emmanuel Gomes Brandão, Guilherme Pais, Rodrigo Vieira, André Gama.
- 포르투갈어(포르투갈): Nuno Carapito, Pedro Daniel, José Rodrigues, Diogo Barros.
- 루마니아어: Stefan Gabos.
- 러시아어: Дмитрий Кирьянов, Анатолий Калужин.
- 스페인어: David Fernández Aldana, Ricardo Rubio, Thierry DEMAN, José María Aguilar.
- 스웨덴어: Johan Spånberg, Notetur Nomen.
- 타밀어: Merbin J Anselm, Jeyanthinath Muthuram, Boopesh Kumar, Nithun Harikrishnan, Vignesh Rajendran.
- 터키어: Meryem Aytek, Fıratcan Sucu, Ahmetcan Aksu, Mehmet Yönügül, Ömer Sert, Anıl MISIRLIOĞLU, Misir Jafarov, Bruh Moment.
- 우크라이나어: Arthur Murauskas, Alexander Varchenko, Вадим Шашков, Евгений Коростылёв.
- 베트남어: Van-Tien Hoang, Vuong Bui, Chủ Tất.