풍부한 코드 탐색 경험 첫 공개
2018년 12월 4일 Jonathan Carter, @lostintangent
Pull request는 매일 수백만 명의 개발자에게 중요한 협업 도구로, 비동기 코드 검토 및 팀 및 오픈 소스 커뮤니티 간의 지식 공유를 촉진합니다. 이러한 광범위한 유용성과 채택으로 인해 PR 검토 워크플로우의 모든 발전은 개발자 생산성, 제품 품질 및 릴리스 속도에 상당한 영향을 미칠 수 있습니다.
지난 9월, GitHub와 함께 GitHub Pull Requests 확장 프로그램을 발표했으며, 이를 통해 개발자는 자신이 작성하는 곳, 즉 익숙하고 고도로 맞춤 설정된 편집기 안에서 소스 코드를 검토할 수 있었습니다. 오늘날, 우리는 풍부하고 다중 리포지토리 코드 탐색을 지원하여 편집기 내 PR 검토를 더욱 강화할 새로운 경험의 미리보기를 공유하게 되어 기쁩니다.
피상적인 검토는 이제 그만
Pull request를 철저히 검토하려면 변경 사항의 맥락과 이것이 광범위한 코드베이스에 미치는 영향을 이해해야 합니다. 오늘날 많은 개발자는 브라우저에서 "가벼운 검토"를 수행하며, 이는 매우 편리한 워크플로우를 제공하지만 맥락을 놓치기 쉽습니다(예: "이 변경으로 인해 API의 다른 소비자가 중단되지 않습니까?"). GitHub Pull Requests 확장은 검토 중인 소스 코드를 빌드하고 탐색하기 위해 개발 환경의 기능을 활용할 수 있도록 하여 이 경험을 개선했지만, 여전히 로컬에서 브랜치를 체크아웃하고 필요한 플랫폼 SDK 및 언어 확장이 설치되어 있어야 합니다. 모든 PR에 대해 이를 수행하려면 상당한 시간과 컨텍스트 전환이 필요하므로, 원격 PR을 빠르게 검토하는 편리함과 로컬 편집기에서 검토하는 강력함 중 하나를 선택해야 합니다. 개발자는 둘 다 누릴 수 있어야 한다고 생각합니다.
우리가 구축하고 있는 풍부한 코드 탐색 경험은 개발자가 개발 환경 내에서(Visual Studio 및 Visual Studio Code 확장을 통해) 관심 있는 pull request를 추적할 수 있도록 지원하며, 언제든지 로컬에서 해당 토픽 브랜치를 체크아웃할 필요 없이 원격으로 호스팅되는 PR의 변경 사항을 원활하게 탐색할 수 있습니다. 특히, 이는 GitHub Pull Requests 뷰에서 여는 파일을 다른 편집기 환경(예: 호버 정보, 정의로 이동, 모든 참조 찾기)을 구동하는 동일한 코드 탐색 기능으로 강화하지만, 이 경우에는 완전히 클라우드로 지원됩니다. 우리는 이것이 팀을 더 생산적으로 만들고 피상적인 검토를 과거의 것으로 만들 수 있다고 믿습니다.

macOS에서 C# 기반 PR을 탐색 중이며, C# 확장 프로그램 또는 .NET을 설치하지 않은 상태입니다.

macOS에서 C++ 기반 PR을 탐색 중이며, C++ 확장 프로그램을 설치하지 않은 상태입니다.

macOS에서 Java 기반 PR을 탐색 중이며, Java Language Support (redhat.java) 확장 프로그램을 설치하지 않은 상태입니다.
모든 것을 탐색
이 경험을 통해 검토 중인 파일 내, PR의 일부로 변경된 다른 파일 내, 그리고 동일한 리포지토리의 임의 파일 내에 정의된 기호(예: 클래스, 함수, 속성)를 탐색할 수 있습니다. 따라서 전체 코드베이스 내에서 변경 사항을 이해하는 능력은 PR의 범위나 로컬 환경에 의해 제한되지 않습니다.
또한, 검토 중인 PR이 외부 리포지토리의 종속성을 사용하거나 외부 리포지토리의 코드에서 사용되는 API를 포함하는 경우, 해당 소스까지 직접 탐색할 수도 있습니다! 이를 통해 애플리케이션이 버전 관리에서 어떻게 구성되었는지에 관계없이 변경 사항의 영향을 완전히, 그리고 더 중요하게는 빠르게 평가할 수 있습니다. 우리는 이것이 특히 더 많은 팀이 다중 리포지토리 애플리케이션/마이크로서비스를 구축하고 OSS에 크게 의존함에 따라 매우 강력한 기능이라고 믿습니다.

외부 참조에서 MobX 리포지토리의 외부 참조에서 observable 함수로 직접 탐색 중입니다.
커뮤니티 중심 디자인
이 경험의 이면에는 이미 Visual Studio 및 Visual Studio Code와 같은 여러 도구에서 언어 지원의 기반이 되는 Language Server Protocol(LSP)에 대한 추가 기능이 있습니다. Language Server Index Format(LSIF, "else if"처럼 발음)이라고 하는 이 제안은 언어 서버가 런타임 지능을 유지할 수 있는 수단을 제공하여, 이후 대규모로 LSP 요청(예: 호버 및 정의로 이동)을 처리하는 데 사용될 수 있도록 합니다. 또한, LSIF가 정의하는 데이터 모델은 리포지토리를 소스 코드의 풍부한 그래프와 코드가 외부 리포지토리와 갖는 관계를 통해 표현할 수 있도록 합니다.
이 서비스 개발의 일환으로 다양한 언어(TypeScript, Java, C++, C#)에 대한 LSIF 지원 구현을 시작했으며, 지금까지의 결과에 매우 만족하고 있습니다. 그러나 이 노력이 성공하기 위해서는 표준뿐만 아니라 추가 언어 구현 모두에서 커뮤니티와 협력하는 것이 중요합니다. LSIF에 대해 자세히 알아보고 향후 대화에 기여하려면 초안 LSIF 사양을 확인하세요.
여러분의 피드백이 필요합니다!
풍부한 코드 탐색 경험의 첫 공개를 공유하게 되어 기쁩니다! 여러분이 사용해 볼 수 있도록 되기까지는 아직 많은 작업이 남아 있지만, 우리가 무엇을 하고 있는지에 대해 커뮤니티와 열린 대화를 시작하고 싶었습니다. 저희 팀과 대화하고 잠재적인 미리보기에 참여하는 데 관심이 있다면 여기에서 등록할 수 있습니다. 가까운 시일 내에 더 많은 업데이트를 공유할 수 있기를 기대합니다!
즐거운 검토 되세요!
Jonathan, @lostintangent