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

2020년 1월 (버전 1.42)

업데이트 1.42.1: 이번 업데이트는 다음 이슈들을 해결합니다.

다운로드: Windows: x64 | Mac: Intel | Linux: deb rpm tarball snap


Visual Studio Code 2020년 1월 릴리스에 오신 것을 환영합니다. 이번 버전에는 여러분이 좋아해 주셨으면 하는 몇 가지 업데이트가 있습니다. 주요 내용 중 일부는 다음과 같습니다.

이 릴리스 노트를 온라인으로 읽으려면 code.visualstudio.com업데이트로 이동하십시오.

Insider: 가능한 한 빨리 새로운 기능을 보려면? 야간 빌드인 Insider를 다운로드하고 최신 업데이트를 즉시 사용해 볼 수 있습니다. 최신 Visual Studio Code 뉴스, 업데이트 및 콘텐츠를 보려면 Twitter @code를 팔로우하세요!

워크벤치

이름 바꾸기 미리 보기

Visual Studio Code에서 이제 이름 바꾸기 변경 사항을 미리 볼 수 있습니다. 이름을 바꿀 때 ⌘Enter (Windows, Linux Ctrl+Enter)로 새 이름을 확인하고 리팩터링 미리 보기 패널을 볼 수 있습니다. 이 패널은 diff 편집기에 보류 중인 변경 사항을 표시하고 개별 변경 사항을 선택/해제할 수 있습니다. 이름 바꾸기가 적용되거나(또는 취소되면) diff 편집기와 미리 보기 패널이 닫히고 현재 편집기로 돌아갑니다.

Rename preview

테마: GitHub Sharp, 글꼴: FiraCode

열린 편집기 수 제한

한 번에 열 수 있는 편집기의 최대 수를 제한하는 새로운 설정이 있습니다.

  • workbench.editor.limit.enabled: 이 기능 활성화 (기본값은 비활성화).
  • workbench.editor.limit.perEditorGroup: 편집기 그룹별로 제한을 적용할지 또는 모든 그룹에 적용할지 여부.
  • workbench.editor.limit.value: 열려 있는 최대 편집기 수 (기본값은 10).

활성화하면 VS Code는 새 편집기를 열 때 가장 최근에 사용하지 않은 편집기를 닫습니다.

아래는 제한이 3으로 설정되었을 때의 동작입니다.

Open editor limit

테마: Nord

참고: 더럽혀진 편집기(저장되지 않은 변경 사항이 있는 파일)는 자동으로 닫히지 않지만, 총 열린 편집기 수에는 포함됩니다.

제목 없는 편집기 개선

VS Code의 제목 없는 편집기는 아직 디스크에 저장되지 않은 텍스트 버퍼입니다. 원하는 만큼 열어둘 수 있으며, 모든 텍스트 내용은 다시 시작할 때마다 저장되고 복원됩니다.

제목 없는 편집기 제목

이전에는 제목 없는 편집기에 Untitled-1과 같이 숫자가 증가하는 일반적인 이름이 부여되었습니다. 이번 릴리스에서는 제목 없는 편집기가 문서의 첫 줄 내용을 편집기 제목으로 사용하고 일반 이름을 설명으로 포함합니다.

Untitled file title using first line of text

테마: Nord

참고: 첫 번째 줄이 비어 있거나 단어가 포함되어 있지 않으면 제목은 이전과 같이 Untitled-*로 대체됩니다.

기본 언어 모드

기본적으로 제목 없는 파일에는 특정 언어 모드가 구성되어 있지 않습니다. VS Code에는 제목 없는 파일의 기본 언어를 구성하기 위한 files.defaultLanguage 설정이 있습니다. 이번 릴리스에서는 이 설정을 새로운 값인 {activeEditorLanguage}로 설정하여 고정된 기본값 대신 현재 활성 편집기의 언어 모드를 동적으로 사용할 수 있습니다.

또한, VS Code 편집기에서 복사된 텍스트를 제목 없는 편집기에 복사하여 붙여넣으면 VS Code에서 자동으로 제목 없는 편집기의 언어 모드를 변경합니다.

Untitled file language mode dynamically set

테마: One Dark Pro

참고: 제목 없는 편집기에 이미 언어 모드가 지정되어 있는 경우 텍스트를 붙여넣어도 변경되지 않습니다.

최근 사용한 편집기 탐색

이번 릴리스에서는 모든 편집기 그룹에 걸쳐 최근 사용한(MRU) 편집기 목록이 있습니다. 편집기는 활성 편집기로 열리거나 이미 열려 있는 경우 새 활성 편집기가 되면 최근 사용된 것으로 간주됩니다. 편집기가 닫히면 이 목록에서 제거됩니다.

이 목록의 한 가지 응용은 새 **보기: 최근 사용한 편집기별 모든 편집기 보기**(workbench.action.showAllEditorsByMostRecentlyUsed) 명령을 통해 열 수 있는 새로운 edt mru 피커입니다.

MRU editor list

마우스를 사용하지 않고 이 피커에서 빠르게 탐색할 수 있도록 키보드 바로가기를 추가할 수 있습니다. 예를 들어, 아래는 기본 키 바인딩이 활성 그룹 내에서만 작동하는 대신 Ctrl+TabCtrl+Shift+Tab을 사용하여 모든 그룹의 편집기를 탐색하는 키 바인딩입니다.

[
  {
    "key": "ctrl+tab",
    "command": "workbench.action.quickOpenPreviousRecentlyUsedEditor",
    "when": "!inEditorsPicker"
  },
  {
    "key": "ctrl+shift+tab",
    "command": "workbench.action.quickOpenLeastRecentlyUsedEditor",
    "when": "!inEditorsPicker"
  }
]

피커를 사용하지 않고 목록을 탐색하려면 다음 새 명령을 사용합니다.

  • 보기: 다음으로 최근 사용한 편집기 열기 (workbench.action.openNextRecentlyUsedEditor)
  • 보기: 이전으로 최근 사용한 편집기 열기 (workbench.action.openPreviousRecentlyUsedEditor)

피커 기반 탐색과 그렇지 않은 탐색 명령을 구별하기 위해 일부 기존 명령의 동작이 변경되었습니다. 특히, 그룹 내 최근 사용 편집기 명령은 더 이상 피커를 사용하지 않습니다.

  • 보기: 그룹 내 다음으로 최근 사용한 편집기 열기 (workbench.action.openNextRecentlyUsedEditorInGroup)
  • 보기: 그룹 내 이전으로 최근 사용한 편집기 열기 (workbench.action.openPreviousRecentlyUsedEditorInGroup)

피커 기반 탐색의 경우 다음을 사용합니다.

  • 보기: 그룹 내 이전으로 최근 사용한 편집기 빠른 열기 (workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup)
  • 보기: 그룹 내 가장 최근 사용하지 않은 편집기 빠른 열기 (workbench.action.quickOpenLeastRecentlyUsedEditorInGroup)

패널 이동

출력, 디버그 콘솔, 터미널 및 문제 패널을 포함하는 패널을 편집기 왼쪽으로 이동할 수 있습니다.

보기: 패널 위치 전환 (workbench.action.togglePanelPosition) 명령은 다음 새 명령으로 대체되었습니다.

  • 보기: 패널 왼쪽으로 이동 (workbench.action.positionPanelLeft)
  • 보기: 패널 오른쪽으로 이동 (workbench.action.positionPanelRight)
  • 보기: 패널 아래로 이동 (workbench.action.positionPanelBottom)

다시 시작 시 모든 창 복원

VS Code의 시작 시 창 복원 설정이 기본적으로 모든 창을 복원하도록 변경되었습니다. 이전 동작으로 돌아가려면 "window.restoreWindows": "one"으로 설정하여 단일 창만 열도록 구성하십시오.

저장 충돌 해결

VS Code에는 VS Code 외부 또는 다른 프로그램(예: Git)에서 변경된 더럽혀진 파일을 저장하려고 할 때 알림을 표시하는 내장 메커니즘이 있습니다.

Save conflict dialog with overwrite

이는 파일이 더럽혀진 후에 변경되었음에도 불구하고 저장하면 디스크의 내용이 덮어쓰여진다는 것을 알리는 것입니다. 비교 버튼을 선택하면 변경 사항과 디스크의 버전을 검토하고 파일을 덮어쓰거나 되돌릴 수 있습니다.

디스크의 변경 사항을 덮어쓸 수 있다는 것을 알고 있는 경우, 알림에 직접 덮어쓰기 버튼이 있습니다. 또한 files.saveConflictResolution을 전역, 작업 영역별 또는 파일 유형별로 구성하여 이 동작을 완전히 비활성화할 수 있습니다. 옵션은 askUser(기본값) 또는 overwriteFileOnDisk입니다.

느린 저장 작업 처리

VS Code를 사용하면 확장이 파일을 디스크에 저장할 때 파일 내용을 변경할 수 있습니다. 저장 시 서식저장 시 수정과 같은 기능이 그 예입니다. 그러나 저장은 중요한 작업이며, 확장은 실제 저장 작업을 진행할 수 있도록 빠르게 처리해야 합니다. "빠르게"는 VS Code에서 적용되었으며, VS Code는 타임아웃 후 확장 저장 작업을 취소했습니다. 이러한 적용은 빠른 저장을 보장했지만, 예상했던 처리가 발생하지 않아 좌절감을 줄 수 있었습니다.

이번 릴리스에서는 타임아웃 기반 접근 방식을 포기하고 대신 저장에 참여하는 확장 프로그램( "저장 참가자")을 취소할 수 있는 진행률 알림을 표시합니다. 이 알림은 저장 작업이 실행 중임을 알려주고 저장 참가자가 완료될 때까지 기다릴지 여부를 결정할 수 있도록 합니다.

Save Participant notification

테마: Light+

소스 제어 입력

소스 제어 보기의 입력 상자가 이제 Monaco Editor를 사용합니다. Monaco Editor는 다중 커서 및 줄 이동/복사 명령과 같은 유용한 기능을 지원합니다.

다중 루트 탐색기에서 두 단계로 축소

다중 루트 작업 영역을 사용하는 경우, 파일 탐색기의 폴더 축소 버튼에 이제 두 단계 동작이 있습니다. 첫 번째 클릭은 각 최상위 수준 내의 모든 폴더를 축소하고, 두 번째 클릭은 최상위 수준 폴더를 축소합니다. 검색 보기는 이미 이 동작을 수행합니다.

Two-step File Explorer collapse button

테마: Monokai

OS 색상 체계에 따른 자동 테마 전환

Windows 및 macOS는 이제 밝은 테마와 어두운 테마를 지원합니다. OS의 색상 체계 변경 사항을 수신 대기하고 해당 테마에 맞게 전환하도록 VS Code에 지시하는 새로운 설정 window.autoDetectColorScheme이 있습니다.

색상 체계가 변경될 때 사용되는 테마를 사용자 지정하려면 설정에서 선호하는 밝은 테마와 어두운 테마를 설정할 수 있습니다.

  • workbench.preferredLightColorTheme
  • workbench.preferredDarkColorTheme

편집기

Peek 보기 포커스 제어

Peek 보기에서 초기 포커스를 배치하는 위치를 제어하는 새로운 설정과 명령이 있습니다. 기본적으로 Peek는 참조로 빠르게 이동할 수 있도록 오른쪽에 있는 트리에 포커스를 맞춥니다. 트리에 초기 포커스를 맞추는 것은 편집기에서 빠른 코드 변경을 위해 Peek를 사용하려는 사람들에게 최적은 아닙니다. 이제 editor.peekWidgetDefaultFocus 설정을 사용하여 선호도를 정의할 수 있으며, editor 또는 tree로 설정할 수 있습니다. 또한 Peek 편집기와 트리 간에 포커스를 이동할 수 있는 새 명령 togglePeekWidgetFocus(⌘K F2 (Windows, Linux Ctrl+K F2))도 있습니다.

접힌 영역 강조 표시

접힌 코드 영역을 배경 강조 표시로 더 쉽게 찾을 수 있습니다.

Fold highlight color

테마: Dark+

이 기능은 editor.foldingHighlight 설정으로 제어되며 색상은 editor.foldBackground 색상으로 사용자 정의할 수 있습니다.

  "workbench.colorCustomizations": {
    "editor.foldBackground": "#355000"
  }

접기 세부 조정

Shift + Click을 접기 표시기에서 한 번 클릭하면 먼저 내부 범위를 접습니다. Shift + Click을 다시 클릭하면(모든 내부 범위가 이미 접혀 있는 경우) 부모를 접습니다. Shift + Click을 다시 클릭하면 모두 펼쳐집니다.

Folding with Shift + Click

이미 접힌 범위에서 접기 명령(⌥⌘[ (Windows, Linux Ctrl+Shift+[))를 사용할 때, 다음으로 펼쳐진 부모 범위가 접힙니다.

새로운 줄 바꿈 옵션

기본적으로 편집기는 모든 문자가 동일한 너비를 갖는다고 가정하여 단어 줄 바꿈을 계산합니다. 이 가정은 기본 알고리즘을 빠르게 만들지만, 고정 너비 글꼴을 사용하거나 문자가 너비가 다른 스크립트에서 텍스트를 작성할 때는 결과가 좋지 않습니다. editor.wrappingStrategy라는 새 설정을 advanced로 설정하면 편집기가 브라우저에 단어 줄 바꿈 계산을 위임합니다.

접근성

제안 위젯 개선

제안 위젯은 더 이상 ARIA 경고를 사용하지 않으며 화면 읽기 프로그램에 초점이 맞춰져 있음을 올바르게 표시합니다. 이렇게 하면 화면 읽기 프로그램이 실수로 방해하는 것을 방지할 수 있습니다.

화면 읽기 프로그램 감지 시 editor.accessibilityPageSize를 160으로 설정

editor.accessibilityPageSize 설정은 한 번에 화면 읽기 프로그램으로 읽을 수 있는 편집기의 줄 수를 제어합니다. 그러나 큰 값을 사용할 때는 성능상의 영향이 있습니다. 화면 읽기 프로그램을 감지할 때 이 값을 자동으로 160줄로 설정합니다(NVDA 버그로 인해 더 이상 설정되지 않음).

Orca를 사용한 Linux 접근성

Linux에서 Orca 화면 읽기 프로그램으로 VS Code를 접근 가능하게 만드는 작업을 시작했습니다. 그러나 이 작업은 Electron 7이 필요하므로 다음 안정 릴리스에서 더 많은 진전을 기대합니다. 그 동안 Linux 접근성을 위해 Insiders 버전을 사용하고 피드백을 제공해 주십시오.

통합 터미널

스크롤 감도

터미널의 스크롤 감도는 이제 새로운 설정을 사용하여 편집기와 독립적으로 구성할 수 있습니다.

  • terminal.integrated.mouseWheelScrollSensitivity - 마우스 휠 스크롤 승수 (기본값은 1).
  • terminal.integrated.fastScrollSensitivity - Alt를 누를 때 빠른 스크롤 승수 (기본값은 5).

디버깅

초기 디버그 보기 단순화

디버그 보기 시작을 단순화하기 위해 VS Code는 이제 하나의 실행 및 디버그 버튼만 표시합니다. 디버깅 없이 실행 작업(모든 디버거에서 지원되지 않음)은 여전히 디버그 메인 메뉴에서 사용할 수 있습니다.

사용자 피드백에 따라, 중단점이 하나 이상 설정되어 있으면 시작 보기에서 중단점 패널이 표시됩니다.

Simplified initial Debug view

디버그 콘솔 개선

디버그 콘솔 입력

디버그 콘솔 입력은 이제 현재 활성 편집기의 언어 모드를 사용합니다. 즉, 디버그 콘솔 입력은 구문 색상, 들여쓰기, 따옴표 자동 닫기 및 기타 언어 기능을 지원합니다.

Debug Console input with syntax coloring

입력/출력 표시

디버그 콘솔의 입력 및 출력 표시를 조정하여 더 잘 구분되도록 했습니다. VS Code는 입력 표현식 옆에만 화살표를 표시합니다.

Debug Console input with arrow display

디버그 콘솔 입력 기록 제안

디버그 콘솔 입력 상자는 이제 이전에 입력한 항목을 자동으로 제안합니다. 텍스트 아이콘은 다른 IntelliSense 항목과 기록 제안을 구별하는 데 사용됩니다.

Debug console history

디버깅 후 디버그 콘솔 숨기기

디버깅이 중지된 후 디버그 콘솔이 자동으로 닫혀야 하는지 여부를 제어하는 새 설정 debug.console.closeOnEnd가 있습니다.

console.table(...) 지원

디버그 콘솔은 이제 Node.js console.table(...) API에서 오는 출력을 표시할 수 있습니다.

Debug Console table output

로드된 스크립트 보기 개선

로드된 스크립트 보기가 VS Code의 새 트리 보기로 업데이트되었습니다. 이제 VS Code의 파일 탐색기와 동일한 간결한 형식으로 단일 자식 폴더를 렌더링합니다. 또한 입력하면서 트리를 검색하고 확장할 수 있습니다.

Expand as you type in Loaded Scripts view

다음 릴리스에서는 트리에서 "입력하면서 검색 및 확장" 기능을 복제하는 디버그: 로드된 스크립트 열기 명령을 제거할 계획입니다.

시작 구성 정렬 및 그룹화

시작 구성 및 복합체는 이제 새로운 구조화된 특성 presentation을 지원합니다. order, grouphidden 특성을 사용하여 디버그 구성 드롭다운 및 디버그 빠른 선택에서 구성을 정렬, 그룹화 및 숨길 수 있습니다.

예를 들어, launch.json의 시작 구성은 다음과 같은 presentation 필드를 가질 수 있습니다.

"presentation": {
    "group": "5_tests",
    "order": 10,
    "hidden": false
}

예를 들어, VS Code 자체의 시작 구성에 프레젠테이션을 추가하여 더 의미 있는 방식으로 그룹화하고 복합 시작 구성의 일부인 구성은 숨겼습니다.

Debug view context menu

디버그 활동 막대 아이콘 및 장식

사용자 피드백을 기반으로, 활동 막대의 디버그 아이콘을 업데이트하여 실행 및 디버그를 더 잘 나타냅니다. 디버깅 중에는 디버그 아이콘에 활성 디버그 세션 수를 표시하는 숫자 장식이 있습니다.

Debug Activity Bar icon showing two debug sessions

작업

사용자 수준 작업

tasks.json에 선언된 작업은 이제 사용자 설정 수준에서 지원됩니다. 여러 프로젝트에서 사용하는 빌드 스크립트가 있거나 작업이 프로젝트 폴더에 있기를 원하지 않으면 사용자 tasks.json 파일에 작업을 추가할 수 있습니다. 작업: 사용자 작업 열기 명령을 실행하여 사용자 수준 작업을 만들면 해당 작업은 모든 폴더 및 작업 영역에서 사용할 수 있습니다. 여기서는 shellprocess 작업 유형만 지원됩니다.

pickString 입력 레이블

작업 inputs를 사용하는 경우 pickString 입력 options에 친숙한 레이블을 추가할 수 있습니다.

"inputs": [
  {
      "id": "pickAnInputValue",
      "description": "Pick a Value",
      "type": "pickString",
      "options": [
          "first-value",
          {
              "label": "Second Value",
              "value": "second-long-value-that-can-be-simplified-for-display"
          }
      ],
      "default": "first-value"
  }
]

레이블은 다음과 같이 표시됩니다.

Task pickString input with label

언어

TypeScript 3.7.5

번들 TypeScript 버전을 3.7.5로 업데이트했습니다. 이 마이너 업데이트에는 Windows의 C: 드라이브에 저장되지 않은 프로젝트에 대한 IntelliSense 수정과 같은 중요한 버그 수정이 포함되어 있습니다.

HTML 미러 커서 기본값 비활성화

HTML 미러 커서는 이제 선택적 기능입니다. 다음 반복에서는 이 기능을 더 쉽게 이해하고 더 많은 언어에서 사용할 수 있도록 구현을 개선할 것입니다. html.mirrorCursorOnMatchingTag를 켜서 이 기능을 계속 사용할 수 있습니다.

미리 보기 기능

미리보기 기능은 릴리스 준비가 되지 않았지만 사용할 만큼 기능적입니다. 개발 중인 동안 초기 피드백을 환영합니다.

타임라인 보기

이번 마일스톤에서는 새로운 타임라인 보기에 대한 작업을 진행했으며 초기 미리 보기를 공유할 수 있습니다. 이는 리소스(파일, 폴더)에 대한 시계열 이벤트(예: Git 커밋, 파일 저장, 테스트 실행 등)를 시각화하는 통합 보기입니다. 타임라인 보기를 활성화하려면 Insiders 에디션을 사용해야 하며 다음 설정을 추가해야 합니다.

"timeline.showView": true

아래는 파일의 Git 커밋 기록을 표시하는 타임라인 보기입니다.

Timeline view

테마: Dark Amethyst

이 초기 미리 보기에서 타임라인 보기는 현재 32개 항목으로 제한된 활성 문서의 Git 커밋 기록을 표시합니다. 해당 커밋 중 하나를 선택하면 해당 커밋에서 도입된 변경 사항의 diff 보기가 열립니다. 확장 프로그램은 자체 타임라인 소스를 기여할 수도 있으며, 이는 이 통합 타임라인 보기에 표시됩니다. 궁극적으로 보기에서 보고 싶은 소스를 선택(필터링)할 수도 있습니다.

계속 지켜봐 주세요. 이 새로운 기능에 대해 더 많은 것을 준비하고 있습니다. 이슈 #84297을 구독하고 'timeline' 태그가 지정된 이슈를 주시하여 진행 상황을 따라갈 수 있습니다. 이 보기에 추가하고 싶은 다른 유형의 정보에 대한 아이디어가 있다면 알려주세요!

검색 에디터

새로운 검색 편집기에 대한 작업을 계속했으며, 이번 반복의 목표는 검색 편집기를 기본 검색 환경으로 만드는 것입니다. 이를 위해 검색 편집기의 쿼리를 구성하는 UI를 구현했습니다.

Search Editor UI

테마: Noctis Lilac, 글꼴: Hasklig

이제 검색 편집기에 대한 몇 가지 명령이 있으며, 원하는 키보드 바로가기에 바인딩할 수 있습니다.

  • search.action.openNewEditor: 활성 편집기 그룹에 새 검색 편집기를 엽니다.
  • search.action.openInEditor: 현재 검색 결과를 새 검색 편집기로 복사합니다.

검색 편집기에 대한 자세한 정보와 추가 업데이트는 이슈 #23931을 참조하십시오.

참고: 검색 편집기는 Insiders에서 기본적으로 활성화되며, search.enableSearchEditorPreviewtrue로 설정하여 Stable에서 선택적으로 사용할 수 있습니다.

TypeScript 및 JavaScript에 대한 의미 체계 강조 표시

TypeScript 및 JavaScript에 대한 의미 체계 강조 표시 지원은 개발 중이며 아직 기본적으로 활성화되지 않았습니다. 다음 설정을 추가하여 사용해 볼 수 있습니다.

"editor.semanticHighlighting.enabled": true

활성화하면 일부 식별자에 새로운 색상과 스타일이 적용되고, 해석된 유형에 따라 강조 표시되는 것을 볼 수 있습니다. 기본 구문(TextMate) 강조 표시는 많은 토큰을 variables로 분류하며, 이러한 토큰은 이제 네임스페이스, 클래스, 매개변수 등으로 해석됩니다.

각 가져온 기호가 기호의 유형으로 색상이 지정되는 가져오기 섹션에서 이를 가장 잘 볼 수 있습니다.

TypeScript semantic highlighting

개발자: 편집기 토큰 및 범위 검사 명령을 사용하여 각 위치에 대해 계산된 의미 체계 및 구문 토큰을 검사할 수 있습니다.

새 JavaScript 디버거

Node.js 및 Chrome용 새 디버거를 개발 중입니다. Insiders에는 기본적으로 설치되며, VS Code Stable에서는 Marketplace에서 설치할 수 있습니다. debug.javascript.usePreview 설정을 활성화하여 기존 시작 구성으로 사용을 시작할 수 있습니다. 다음은 이번 달에 추가한 새로운 기능 중 일부입니다.

새로운 JS 디버거는 디버그: JavaScript 디버그 터미널 만들기 명령을 통해 열 수 있는 새 JavaScript 디버그 터미널에서 실행하는 명령을 자동으로 디버깅합니다.

JavaScript debug terminal

테마: Earthsong, 글꼴: Fira Code

새 디버거는 package.json의 scripts 섹션에 디버그 CodeLens를 제공하여 추가 구성 없이 스크립트를 실행하고 디버그할 수 있습니다.

JavaScript debug CodeLens

debug.javascript.codelens.npmScripts 설정을 통해 CodeLens의 가시성과 위치(상단 또는 인라인)를 구성할 수 있습니다.

사용해 보세요! 새 디버거에 문제가 발생하면 vscode-js-debug 리포지토리에 이슈를 제출할 수 있습니다.

사이드바에서 패널로 보기 이동

VS Code 레이아웃을 더 쉽게 사용자 지정하기 위한 작업이 적극적으로 진행 중입니다. 설정을 통해 진행 상황을 테스트할 수 있습니다.

"workbench.view.experimental.allowMovingToNewContainer": true

이 설정이 활성화되면 일부 보기에는 사이드바와 패널 간에 이동할 수 있는 새로운 컨텍스트 메뉴 항목이 있습니다. 현재 이 설정은 탐색기의 개요 보기 및 확장에서 제공하는 보기에만 영향을 미칩니다. 또한 사이드바에서처럼 패널에서 이러한 보기를 결합할 수 없습니다.

Outline view moving to panel and back

테마: LaserWave, 글꼴: Cascadia Code

이것은 기능의 미리 보기일 뿐이며 언급된 제한 사항을 포함하여 많은 측면이 변경될 가능성이 있습니다. Insiders 버전에서 추가 진행 상황을 자유롭게 확인하십시오.

검색에 대한 참고: 보기 이동에 대한 새로운 일반화된 방법을 사용함에 따라, 이전 검색 보기 설정 search.location 및 명령 검색: 검색 보기 위치 전환 (search.action.toggleSearchViewPosition)은 사용 중단됩니다. 설정은 자동으로 마이그레이션되지만, 앞으로 검색 보기를 이동하려면 새 일반화된 방법을 사용해야 합니다. 위의 실험적 미리 보기 설정을 활성화하지 않아도 새 컨텍스트 메뉴 항목으로 검색 보기를 이동할 수 있습니다.

TypeScript 3.8 베타 지원

VS Code는 다음 달 공식 릴리스까지 TypeScript 3.8을 번들로 제공하지 않지만, 이번 반복에서는 흥미로운 TypeScript 3.8-베타 기능에 대한 지원을 추가했습니다.

여기에는 다음이 포함됩니다.

  • JavaScript 및 TypeScript 파일의 private 필드에 대한 IntelliSense 및 구문 강조 표시.
  • JavaScript 및 TypeScript에 대한 호출 계층 지원.
  • 템플릿 문자열로 변환 리팩터링!

TypeScript Nightly 확장 프로그램을 설치하면 오늘 이러한 새로운 TypeScript 3.8 기능을 쉽게 사용해 볼 수 있습니다. TypeScript 3.8 베타에서 버그가 발생하면 피드백을 공유해 주십시오!

확장 프로그램 기여

Java 디버거, 데이터 중단점 지원

Java 디버거 확장은 이제 VS Code 1.38에서 도입된 데이터 중단점을 지원합니다. 이 기능을 사용하면 변수 값이 변경될 때 히트되는 중단점을 만들 수 있습니다.

아래에서는 Owner.telephone 문자열이 변경될 때 디버거가 중단되는 것을 볼 수 있습니다.

Java Data Breakpoints

Java 호출 계층 보기

Java 언어 지원 확장은 이제 함수를 호출하거나 함수로 호출되는 모든 호출을 보여주고 호출자의 호출자 및 호출의 호출을 드릴할 수 있는 호출 계층 보기를 지원합니다.

기호 위에서 마우스 오른쪽 버튼을 클릭하고 찾아보기 > 호출 계층 찾아보기를 선택하여 호출 계층을 볼 수 있습니다.

Java Call Hierarchy view

원격 개발

컨테이너, 원격 머신 또는 Linux용 Windows 하위 시스템(WSL)을 전체 기능 개발 환경으로 사용할 수 있는 원격 개발 확장에 대한 작업이 계속 진행 중입니다.

1.42의 주요 기능은 다음과 같습니다.

  • 원격 - SSH: Windows 서버에 대한 지원 향상, 자동 OS 감지 포함.
  • WSL: WSL 리소스에 대한 Windows 탐색기 열기 위한 탐색기에서 보기 지원.
  • 개발 컨테이너: Git 및 zsh와 같은 종속성이 포함된 사전 빌드된 컨테이너 이미지.
  • 포트 전달 보기: SSH 및 컨테이너 포트 매핑, 보기, 재사용.

새 확장 프로그램 기능 및 버그 수정은 원격 개발 릴리스 노트에서 확인할 수 있습니다.

확장 프로그램 작성

재사용 가능한 Codicon

대부분의 VS Code 아이콘에는 codicon 아이콘 글꼴이 사용됩니다. 확장 프로그램은 이제 간단하고 선언적인 방식으로 해당 아이콘을 재사용할 수 있습니다.

  • vscode.ThemeIcon 타입은 이제 codicon 이름으로 인스턴스화할 수 있습니다. 예를 들어 new vscode.ThemeIcon("zap")입니다.
  • vscode.MarkdownString 타입은 이제 $(<name>) 인라인 구문을 지원합니다. 예를 들어 myMdString.appendMarkdown('Hello $(globe)');입니다. MarkdownString 내에서 codicon을 사용하려면 supportThemeIcons 생성자 인수를 활성화해야 합니다.
  • 확장 프로그램의 package.json 파일에 정의된 commands는 이제 아이콘으로 codicon을 사용할 수 있습니다. 인라인 구문을 사용합니다. 예를 들어 "icon": "$(zap)"입니다.

All available codicons displayed in a hover

테마: Light+

위의 툴팁은 사용 가능한 모든 codicon을 렌더링합니다. all 상수에서 codicon 이름의 대부분은 가독성을 위해 제거되었지만 툴팁은 다음 스니펫으로 만들어졌습니다.

vscode.languages.registerHoverProvider(
  '*',
  new (class implements vscode.HoverProvider {
    provideHover(doc: vscode.TextDocument, pos: vscode.Position) {
      const all = `$(activate-breakpoints)$(add)...$(zoom-out)`;
      const md = new vscode.MarkdownString(all, true);
      return new vscode.Hover(md, doc.getWordRangeAtPosition(pos));
    }
  })()
);

완료 항목의 삽입 및 바꾸기

단어 끝에서 트리거되는 완료는 일반적으로 해당 단어를 바꿉니다. 그러나 단어 내부에서 완료가 트리거될 때 단어 끝을 바꿔야 하는지 여부는 명확하지 않습니다. 확장 프로그램 작성자의 선호도에 따라 사용자는 한 동작 또는 다른 동작을 얻습니다. 이는 이상적이지 않으며 이제 완료 항목의 삽입 및 바꾸기 범위를 표현하는 API가 있습니다.

이를 위해 CompletionItem#range에 새로운 OR 유형을 추가했습니다.

export class CompletionItem {
  range?: Range | { inserting: Range; replacing: Range };

  //...
}
  1. 범위가 undefined인 경우, VS Code는 현재 단어 범위를 **바꾸기**로 사용하고 커서 위치로 잘린 동일한 범위를 **삽입**으로 사용합니다.
  2. 범위가 단순한 vscode.Range인 경우, VS Code는 삽입 또는 바꾸기에 대한 단일 위치만 있음을 알고 있습니다.
  3. 범위가 insertingreplacing 범위가 있는 객체인 경우, VS Code는 이를 직접 사용합니다.

이 정보는 사용자가 자신의 선호도를 정의할 수 있는 editor.suggest.insertMode 설정과 함께 사용됩니다. 다음 릴리스에서 삽입 및 바꾸기 동작을 더 잘 보이게 할 계획이므로 확장 프로그램 작성자에게 이 API를 신속하게 채택해 줄 것을 요청합니다.

호출 계층 제공자 세분화

CallHierarchyProvider#prepareCallHierarchy에 작은 변경을 적용하여 이제 하나 또는 여러 개의 CallHierarchyItem 요소를 반환할 수 있습니다. many 옵션은 오버로드가 여러 개인 요소에 대해 호출 계층 구조를 요청할 때 유용합니다.

터미널에 노출된 생성 옵션

Terminal 객체에 새로운 creationOptions 속성이 추가되어 확장에서 터미널이 어떻게 생성되었는지 식별하는 데 사용할 수 있습니다.

언어별 설정

이제 확장은 새로운 구성 범위인 language-overridable을 사용하여 언어별로 재정의할 수 있는 설정을 제공할 수 있습니다.

"contributes": {
    "configuration": {
        "title": "sample",
        "properties": {
            "sample.languageSetting": {
                "type": "boolean",
                "scope": "language-overridable"
            }
        }
    }
}

Configuration API는 이러한 설정을 지원하도록 향상되었습니다. 필요한 languageId를 전달하여 API를 사용하여 이러한 설정을 읽고 업데이트할 수 있습니다.

/**
 * Read language configuration.
 */
const textDocumentConfiguration = vscode.workspace.getConfiguration('sample', {resource, languageId});
textDocumentConfiguration.get('languageSetting');

/**
 * Override configuration under language
 */
textDocumentConfiguration.update('languageSetting', false, ConfigurationTarget.Global, true);

/**
 * Listen language configuration changes
 */
workspace.onDidChangeConfiguration(e => {
    if(e.affectsConfiguration('sample.languageSetting',  {resource, languageId}) {
    }
});

자세한 내용은 Configuration API를 참조하세요.

확장 보기 컨텍스트 메뉴

이제 새로운 메뉴 위치인 extension/context를 사용하여 확장 보기에서 확장 컨텍스트 메뉴에 명령을 제공할 수 있습니다.

"contributes": {
    "commands": [
        {
            "command": "extension.helloWorld",
            "title": "Hello World"
        }
    ],
    "menus": {
        "extension/context": [
            {
                "command": "extension.helloWorld",
                "group": "2_configure",
                "when": "extensionStatus==installed",
            }
        ]
    }
}

Extensions view context menu

확장의 ID는 명령이 실행될 때 인수로 전달됩니다.

vscode.commands.registerCommand('extension.helloWorld', extensionId => {
  vscode.window.showInformationMessage(extensionId);
});

다음 미리 정의된 컨텍스트가 지원되며, 명령의 when 조건에서 사용할 수 있습니다.

  • extensionStatus==installed
  • isBuiltinExtension

대체된 변수에 접근하기 위한 DebugConfigurationProvider 훅

디버깅을 위한 확장 API는 DebugConfigurationProviderresolveDebugConfiguration 훅을 제공하여 디버그 구성이 디버그 어댑터에 전달되기 전에 유효성을 검사하는 데 사용할 수 있습니다. 이 훅은 **변수가 대체되기 전**에 호출되므로, 유효성 검사 코드는 디버그 구성에 더 많은 변수를 쉽게 추가하고 나중에 대체되도록 할 수 있습니다.

이 접근 방식은 resolveDebugConfiguration 훅에서 **대체된 변수 값**을 사용하기 어렵게 만들 수 있습니다. 예를 들어, 유효성을 검사하거나 확장 자체에만 존재하는 기능(대체된 값이 **사용 가능한** 디버그 어댑터가 아닌)을 구현하는 경우입니다. 예시는 이슈 #85206을 참조하세요. 일부 확장은 자체적으로 변수를 대체하기 시작했습니다(종종 모든 경우를 다루지 못하므로 불완전합니다).

사용자 관점에서는 혼란스럽습니다. 디버그 구성에서 일부 속성 변수는 사용할 수 있지만(대체 후 디버그 어댑터에서 처리되기 때문), 일부 속성 변수는 사용할 수 없습니다(대체가 아직 발생하지 않은 확장 프로그램에서 처리되기 때문). 이슈 #87450은 후자의 문제에 대한 좋은 예입니다.

이번 마일스톤에서는 DebugConfigurationProvider에 두 번째 훅인 resolveDebugConfigurationWithSubstitutedVariables를 추가하여 이 문제를 해결했습니다. 이 훅은 **모든 변수가 대체된** 디버그 구성을 받습니다.

이 새로운 API를 사용할 수 있게 됨에 따라, 모든 디버그 확장 작성자에게 DebugConfigurationProvider.resolveDebugConfiguration의 현재 구현을 주의 깊게 검토하고, 새로운 변수를 도입하지 않지만 대체된 변수에서 실행될 때 이익이 되는 모든 코드를 새로운 메서드 resolveDebugConfigurationWithSubstitutedVariables로 이동하도록 요청합니다.

확장 내에서 디버그 어댑터 구현

기존 디버깅 확장 API는 디버그 어댑터를 여러 방식으로 실행하기 위해 DebugAdapterDescriptorFactory를 등록하는 것을 지원합니다.

외부 프로세스로

vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor: _session => {
    return new vscode.DebugAdapterExecutable('mockDebug.exe');
  }
});

네트워크 세션으로

vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor: _session => {
    return new vscode.DebugAdapterServer(12345, 'localhost');
  }
});

이번 마일스톤에서는 '인라인' 디버그 어댑터 구현을 제공하는 세 번째 변형을 추가했습니다.

vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor: _session => {
    return new vscode.DebugAdapterInlineImplementation(new InlineDebugAdapter());
  }
});

이를 통해 스트림 기반 메커니즘을 통한 어댑터와의 통신이 필요 없어지며, 어댑터가 확장 내에서 실행되고 VS Code의 확장 디버깅의 일부로 쉽게 디버깅할 수 있으므로 개발이 간소화됩니다.

인라인 구현(예: 위의 InlineDebugAdapter)은 Debug Adapter Protocol을 구현해야 합니다. VS Code의 확장 API에 전체 Debug Adapter Protocol을 포함시키고 싶지 않으므로, 이 프로토콜의 최소한의 하위 집합을 도입했습니다. vscode.DebugAdapter 인터페이스에는 어댑터에 DAP 메시지를 전달하는 메서드(handleMessage)와 어댑터로부터 받은 DAP 메시지를 수신 대기하는 메서드(onDidSendMessage) 두 개만 있습니다.

이 인터페이스를 기반으로 디버그 어댑터의 구현은 다음 소스 코드로 시작됩니다.

class InlineDebugAdapter implements vscode.DebugAdapter {
  private sendMessage = new vscode.EventEmitter<DebugProtocol.ProtocolMessage>();
  private sequence: 1;

  readonly onDidSendMessage: vscode.Event<DebugProtocol.ProtocolMessage> = this.sendMessage
    .event;

  handleMessage(message: DebugProtocol.ProtocolMessage): void {
    switch (message.type) {
      case 'request':
        const request = <DebugProtocol.Request>message;
        switch (request.command) {
          case 'initialize':
            const response: DebugProtocol.Response = {
              type: 'response',
              seq: this.sequence++,
              success: true,
              request_seq: request.seq,
              command: request.command
            };
            this.sendMessage.fire(response);
            break;
          // many more requests needs to be handled here...
          default:
            break;
        }
        break;
      case 'response':
        break;
      case 'event':
        break;
    }
  }

  dispose() {
    // clean up resources
  }
}

디버그 어댑터 프로토콜(노드 모듈 vscode-debugprotocol로 사용 가능)은 vscode.DebugAdapter 인터페이스의 호환되는 상위 집합이므로, 전체 프로토콜이 필요하고 디버그 어댑터를 직접 구현하려면 모듈을 가져올 수 있습니다.

훨씬 간단한 대안은 노드 모듈 vscode-debugadapter에서 제공하는 기본 구현(이전과 마찬가지로)을 사용하는 것입니다. 버전 1.38.0-pre.4부터 이 모듈에 도입된 DebugSession(또는 LoggingDebugSession)은 확장 API에 정의된 vscode.DebugAdapter 인터페이스와 호환됩니다.

이 API를 사용하면 기존 디버그 어댑터 구현을 다음과 같이 쉽게 사용할 수 있습니다.

vscode.debug.registerDebugAdapterDescriptorFactory('mock', {
  createDebugAdapterDescriptor: _session => {
    return new vscode.DebugAdapterInlineImplementation(new MockDebugSession());
  }
});

자세한 내용은 Mock debug 예제를 참조하세요.

주의: 이번 릴리스에서는 디버그 어댑터를 생성하기 위한 확장 API를 완성했습니다. 따라서 **3월 릴리스에서 debuggers 기여 지점의 두 가지 더 이상 사용되지 않는 속성에 대한 지원을 제거할 예정**임을 알려드립니다.

  • adapterExecutableCommand - 대신 확장 API vscode.DebugAdapterDescriptorFactoryvscode.DebugAdapterExecutable을 사용하세요. Mock debug 예제 에서 API 사용 방법을 확인할 수 있습니다.
  • enableBreakpointsFor - 대신 breakpoints 기여 지점을 사용하세요. package.json에서 변환해야 합니다.

현재(더 이상 사용되지 않는) JSON이 다음과 같다면

"contributes": {
  "debuggers": [{
    "type": "csharp",
    // ...
    "enableBreakpointsFor": [ "csharp", "razor" ]
    // ...
  }]

변환은 다음과 같습니다.

"contributes": {
  "breakpoints": [
    { "language": "csharp" },
    { "language": "razor" }
  ],
  "debuggers": [{
    "type": "csharp",
    // ...
  }]

영향을 받는 확장은 2월까지 구현을 새 API에 맞게 조정하여 3월까지 문제를 해결할 충분한 시간을 확보하도록 권장합니다.

제안된 확장 API

모든 마일스톤에는 새로운 제안 API가 포함되며 확장 작성자는 이를 사용해 볼 수 있습니다. 언제나처럼 여러분의 피드백을 기다립니다. 제안 API를 사용해 보려면 다음을 수행하세요.

  • 제안된 API는 자주 변경되므로 Insiders를 사용해야 합니다.
  • 확장의 package.json 파일에 이 줄이 있어야 합니다: "enableProposedApi": true.
  • vscode.proposed.d.ts 파일의 최신 버전을 프로젝트 소스 위치로 복사합니다.

제안 API를 사용하는 확장은 게시할 수 없습니다. 다음 릴리스에서 호환성이 깨지는 변경이 있을 수 있으며 기존 확장을 손상시키고 싶지 않습니다.

작업 영역 편집 메타데이터 추가

현재 VS Code에 있는 Refactor Preview 지원은 새로운 선택적 API 제안과 함께 제공됩니다. 이를 통해 작업 영역 편집의 변경 사항을 분류할 수 있습니다. 예를 들어, 변경 사항에 사용자 확인이 필요한지 여부를 정의하거나 "문자열 및 주석에서 이름 바꾸기"와 같은 설명을 추가할 수 있습니다. 이 제안은 이슈 #77728에서 추적할 수 있으며 현재 디자인은 WorkspaceEditMetadata 인터페이스를 중심으로 이루어집니다.

의미론적 하이라이팅

자신이 사용하는 언어에 의미론적 하이라이팅을 추가하는 데 관심이 있다면, Semantic Highlighting Overview에서 개념과 새로운 API에 대한 요약을 확인할 수 있습니다.

인증 제공자

일부 확장은 다른 서비스에 인증이 필요합니다. 이슈 #88309의 제안을 통해 확장이 다른 확장에서 액세스할 수 있는 인증 제공자를 등록할 수 있게 되어 인증 수행을 위한 공통 메커니즘을 제공할 것입니다.

타임라인 제공자

확장이 곧 새로운 Timeline view에 자체 소스를 기여할 수 있게 될 것입니다. 자체 타임라인 소스를 추가하는 데 관심이 있으신가요? 이슈 #84297에서 이 초기 제안을 확인하고 피드백을 제공해 주세요.

Documentation.Refactoring 기여 지점

제안된 documentation.refactoring 기여 지점을 통해 확장은 리팩토링에 대한 문서를 제공할 수 있습니다. 사용자는 리팩토링을 요청할 때 이 문서를 볼 수 있습니다.

Refactoring documentation

제안된 기여 지점을 통해 확장은 명령을 사용하여 문서가 표시되는 방식을 제어할 수 있습니다.

"contributes": {
  "documentation": {
    "refactoring": [
      {
        "title": "Learn more about JS/TS refactorings",
        "when": "typescript.isManagedFile",
        "command": "_typescript.learnMoreAboutRefactorings"
      }
    ]
  }
}
  • title — 사용자에게 표시되는 문서 작업의 레이블입니다.
  • when — 문서가 표시되는 시점을 위한 when 절입니다.
  • command — 문서를 표시하는 명령입니다. 예를 들어, 이 명령은 웹페이지를 열거나 VS Code 내에서 직접 문서를 표시할 수 있습니다.

이슈 #86788은 제안의 상태를 추적합니다.

사용자 지정 편집기를 위한 백업 및 핫 종료 훅

이번 반복에서 제안된 사용자 지정 편집기 API에 대한 반복 작업을 계속했습니다. 이번 달 주요 조사는 사용자 지정 편집기를 위한 핫 종료를 활성화하는 방법이었습니다. 이슈 #88719는 핫 종료를 지원하기 위해 직면했던 몇 가지 과제와 고려했던 몇 가지 접근 방식을 다룹니다.

이 조사 결과, WebviewCustomEditorEditingDelegate 인터페이스에 새로운 선택적 backup 메서드가 추가되었습니다. 이 메서드는 리소스가 변경된 후 약 1초 후에 VS Code에 의해 호출됩니다. backup 메서드 내에서 확장은 리소스를 현재 상태로 유지해야 합니다. 대부분의 경우, 이는 리소스를 작업 영역 저장 폴더에 쓰는 것을 의미합니다. 그런 다음, 편집기가 다시 로드될 때, 리소스 자체를 로드하기 전에 저장된 백업이 있는지 확인해야 합니다.

다음 반복에서 사용자 지정 편집기 API에 대한 반복 작업을 계속할 것입니다.

복잡한 완료 레이블

CompletionItem API를 진화시켜 정규화된 이름, 가져오기 경로, 반환 유형 및 기타 정보를 제공해야 하는 복잡한 완료 항목을 지원합니다. 이 정보는 나중에 해결되는 것이 아니라 사전에 제공되어야 합니다. 제공된 정보는 제안 위젯에 인라인으로 표시됩니다. 다음 반복에서 현재 제안에 대한 반복 작업을 진행할 것입니다. 한편, 제안 위젯에 상태 표시줄을 추가하여 UI 및 검색 가능성 문제 일부를 해결하는 것을 고려하고 있습니다. API에 대한 피드백을 기다립니다.

Complex completion label

테마: Nord, 글꼴: Input Mono

이제 진단 오류에 오류 코드와 연결된 링크를 추가할 수 있습니다. 링크가 제공되면 문제 패널, 인라인 오류 보기 및 진단 오류 호버에 표시됩니다. 다음 반복에서 이 기능에 대한 작업을 계속할 것이므로 이슈 #11847에서 피드백을 제공할 수 있습니다.

Diagnostic with link

언어 서버 프로토콜

Language Server Protocol 버전 3.15가 출시되었습니다. 또한 VS Code LSP 클라이언트 및 Node.js로 작성된 LSP 서버용 해당 npm 모듈도 출시했습니다. 최신 버전의 라이브러리에는 의미론적 토큰에 대한 제안된 사양 및 구현이 포함되어 있습니다.

LSP 웹사이트에는 이제 Language Server Index Format 사양의 예비 버전과 해당 LSIF 개요가 호스팅되어 있습니다.

브라우저 지원

편집기로 파일 드래그 앤 드롭

브라우저에서 VS Code를 사용할 때, 이제 로컬 파일을 편집기 영역으로 드롭하여 해당 파일의 내용으로 더티(저장되지 않음) 파일로 열 수 있습니다.

In-browser support for drag and drop

새로운 명령

명령 명령 ID
패널 왼쪽으로 이동 workbench.action.positionPanelLeft
패널 오른쪽으로 이동 workbench.action.positionPanelRight
패널 하단으로 이동 workbench.action.positionPanelBottom
다음 최근 사용 편집기 열기 workbench.action.openNextRecentlyUsedEditor
이전 사용 편집기 열기 workbench.action.openPreviousRecentlyUsedEditor
그룹에서 다음 최근 사용 편집기 열기 workbench.action.openNextRecentlyUsedEditorInGroup
그룹에서 이전 사용 편집기 열기 workbench.action.openPreviousRecentlyUsedEditorInGroup
최근 사용 편집기 목록 열기 workbench.action.showAllEditorsByMostRecentlyUsed
피커를 통해 이전 사용 편집기 열기 workbench.action.quickOpenPreviousRecentlyUsedEditor
⌃Tab (Windows, Linux Ctrl+Tab) 피커를 통해 그룹에서 이전 사용 편집기 열기 workbench.action.quickOpenPreviousRecentlyUsedEditorInGroup
피커를 통해 가장 적게 사용된 편집기 열기 workbench.action.quickOpenLeastRecentlyUsedEditor
⌃⇧Tab (Windows, Linux Ctrl+Shift+Tab) 피커를 통해 그룹에서 가장 적게 사용된 편집기 열기 workbench.action.quickOpenLeastRecentlyUsedEditorInGroup
개발자: 확장 호스트 다시 시작 workbench.action.restartExtensionHost

엔지니어링

TSLint에서 ESLint로 마이그레이션

VS Code는 주로 TypeScript로 작성됩니다. 컴파일러 외에도 특정 스타일 및 엔지니어링 규칙을 강제하기 위해 린팅을 사용합니다. 과거에는 TSLint를 사용했지만, 약 1년 전에 TSLint 유지 관리자들이 ESLint를 선호하여 사용 중단을 발표했습니다.

이번 마일스톤에서는 ESLint로 마이그레이션했습니다. 여기에는 lint 구성사용자 지정 규칙이 포함됩니다. 마지막으로, 새로운 TypeScript 확장이 ESLint로 확인되도록 yo code 확장 생성기도 업데이트했습니다.

자신의 프로젝트에서 TSLint를 사용하는 경우, ESLint로 전환하는 데 도움이 되는 Migrate TSLint to ESLint 가이드를 만들었습니다.

TypeScript 3.8-beta로 VS Code 빌드

VS Code는 이제 TypeScript 3.8 베타 릴리스를 사용하여 빌드됩니다.

Shadow DOM에서 Monaco Editor 호스팅 지원

마우스 처리 및 동적 CSS와 관련된 다양한 문제를 해결하여 Monaco Editor가 이제 Shadow DOM API shadow root 내에 호스팅될 수 있습니다.

새로운 문서

컨테이너

Microsoft Docker 확장을 사용하여 컨테이너를 생성하는 새로운 문서가 있습니다. Node.jsASP.NET Core 애플리케이션을 컨테이너화하고, 컨테이너 레지스트리에 푸시하고, 클라우드에 컨테이너를 배포하는 튜토리얼을 찾을 수 있습니다.

Docker extension

주요 수정 사항

  • 12058: 종료 시 손실을 방지하기 위해 UI 상태를 주기적으로 저장
  • 79205: 대소문자 구분 없는 플랫폼의 대소문자 구분 파일 시스템에 연결될 때 탐색기 트리가 올바른 내용을 표시하지 않음
  • 83543: 디버그 프로그램 위치가 활성 세션에 대해서만 표시됨
  • 85057: 사용자 지정 대화 상자에서 대화 상자 세부 정보를 설명 행으로 이동
  • 86445: 핫키를 통해 여러 Watch 디버그 변수를 동시에 삭제할 수 없음
  • 88240: 많은 Watch 드롭다운 식을 만드는 데 느림
  • 89057: 읽기 전용 편집기가 문제를 표시하도록 허용
  • 89405: 텍스트 파일: 읽기 전용 모델에 대해 더티로 보고하지 않음

감사합니다

마지막으로, VS Code를 더욱 발전시키는 데 도움을 준 다음 분들께 진심으로 감사드립니다.

이슈 추적에 대한 기여

vscode 기여

vscode-eslint 기여

language-server-protocol 기여

vscode-languageserver-node에 기여

debug-adapter-protocol에 기여

vscode-vsce 기여

vscode-js-debug 기여

vscode-generator-code에 대한 기여

vscode-azurecli에 대한 기여

vscode-emmet-helper에 대한 기여

localization 기여

800명 이상의 Cloud + AI Localization 커뮤니티 회원이 Microsoft Localization Community Platform(MLCP)을 사용하고 있으며, Visual Studio Code에 170명 정도의 활성 기여자가 있습니다. 새로운 번역 제공, 번역 투표, 프로세스 개선 제안 등 여러분의 기여에 감사드립니다.

다음은 기여자의 스냅샷입니다. 프로젝트에 대한 자세한 내용과 기여자 이름 목록을 보려면 프로젝트 사이트(https://aka.ms/vscodeloc)를 방문하십시오.

  • 보스니아어 (라틴어, 보스니아 헤르체고비나): Sead Mulahasanović, Adnan Rizvan, Ismar Bašanović.
  • 불가리아어: Andreyka Lechev.
  • 체코어: Michal Černík.
  • 덴마크어: Lasse Stilvang.
  • 네덜란드어: Philip Denys, Lemuel Gomez, Dennis Hummel, Gideon van de Laar.
  • 영어 (영국): Martin Littlecott, Alexander Ogilvie, Krishna Regar, Alonso Calderon, Daniel Imms, Kamalsinh Solanki.
  • 핀란드어: Tuula P.
  • 프랑스어: Antoine Griffard, Thierry DEMAN-BARCELÒ, Edouard Choinière, Joel Monniot, Rodolphe NOEL, Lucas A., Alain, BUFERNE, Xavier Laffargue, Mohamed Sahbi, DJ Dakta.
  • 독일어: Pascal Wiesendanger, Marvin Heilemann, jan-nitsche, Jakob von der Haar, Michael Richter.
  • 그리스어: Valantis Kamayiannis, Θοδωρής Τσιρπάνης.
  • 히브리어: Ariel Bachar.
  • 힌디어: Kiren Paul, Niraj Kumar, Preeti Madhwal, Jaadu Jinn, Mahtab Alam.
  • 헝가리어: József Cserkó, Kiss Attila Csaba, Krisztián Papp.
  • 중국어 간체: Yizhi Gu, Tingting Yi, Justin Liu, ick, Charles Dong, Peng Zeng, Tony Xia, 斌 项, 普鲁文, paul cheung, 张锐, Zhiqiang Li, Yixing Zheng, AlexiZz Nakido, 冉 耀隆, Chow David, Sheng Jiang, yungkei fan, Yao Rui, Joel Yang, 钟越, Chenglong Wei, 一斤瓜子, Yiting Zhu, Alexander ZHANG, YanJun Sun, Libing Yang, ZHENGCHENG CHEN, 张 任飞, 光宇 朴, 石岩 詹, 舜杰 杨, WJ Wang, Siam Chen.
  • 중국어 번체: Winnie Lin, 船長, Alan Tsai, TingWen Su.
  • 인도네시아어: Eriawan Kusumawardhono, Aldila, Arif Fahmi, Laurensius Dede Suhardiman, Mychael Go, Christian Elbrianno, Septian Adi.
  • 이탈리아어: Alessandro Alpi, Luigi Bruno.
  • 일본어: Takayuki Fuwa, Seiichi Ariga, Koichi Makino, Yoshihisa Ozaki, 貴康 内田, Ishii Shun, Kyohei Uchida, TENMYO Masakazu, Aya Tokura.
  • 한국어: Hongju.
  • 라트비아어: Andris Vilde.
  • 노르웨이어: Frode Aarebrot, Anders Stensaas, Thomas Ødegård, Thomas Isaksen.
  • 폴란드어: Makabeus Orban, Mateusz Redynk, Kacper Łakomski, Piotr Rysak, Wojciech Maj, Oskar Janczak, Szymon Seliga, Franx Bar, Marcin Anonimus.
  • 포르투갈어 (브라질): Marcelo Fernandes, Arthur Lima, Albert Tanure, Loiane Groner, Nylsinho Santos, Alessandro Trovato, Pudda, Matheus Vitti Santos, Rodrigo Crespi, Wellington OStemberg, Roberto Fonseca, Felipe Galante, Rodrigo Tavares, Alessandro Fragnani, Felipe Nascimento, Alexis Lopes.
  • 포르투갈어 (포르투갈): Francisco Osorio, Luís Chaves, Ricardo Sousa Vieira, João Fernandes.
  • 루마니아어: Tiberiu Frățilă, LaServici, Dan Ichim.
  • 러시아어: Vadim Svitkin, Николай Соколовский, Дмитрий Кирьянов, Baturin Valery.
  • 세르비아어 키릴: Dusan Milojkovic.
  • 스페인어: José María Aguilar, Ricardo Estrada Rdez, JOSE AHIAS LOPEZ PORTILLO, Gustavo Gabriel Gonzalez, Camilo Sasía.
  • 스웨덴어: Pelle Alstermo.
  • 타밀어: Rajesh Waran, MUTHU VIJAY, Sankar Raj, Kadhireshan S, saravanan ramesh, Aravindh JANAKIRAMAN, Pandidurai R, Madhu Chakravarthy, Madhu Maha.
  • 터키어: Mehmet Yönügül, Özgür ERSOY, mehmetcan Gün, Misir Jafarov, Isa Inalcik, Fırat Eşki, Gökberk Nur, Safa Selim.
  • 우크라이나어: Serhii Shulhin, Arthur Murauskas, Oleksandr Krasnokutskyi, Фомін Тарас.
  • 베트남어: Dat Nguyen, Vương, Van-Tien Hoang, Dao Ngo, ng-hai.
© . This site is unofficial and not affiliated with Microsoft.