DIY 및 코드 확장 1: 개발

VS 코드에 추가 기능을 추가할 생각은 없으나 검색에는 아무 것도 나타나지 않았습니까?겁먹지 마.스스로 할 때가 되었다.

며칠 전, 나는 내가 다시 3원 표현식으로 진위격을 교환했다는 것을 깨달았다.다시 포맷하고, 문장부호를 바꾸고, 공백을 다시 만드는 등 항상 짜증난다. 그래서 내가 했다 SwapTernary !
만약 당신이 그것을 시험적으로 사용하고 싶다면, 그것은 here - 또는 VS 코드 확장 시장에서 검색하는 것이다.코드만 보려면 check out the repo 할 수도 있습니다.
내 계산에 따르면, 만약 내가 11000명의 개발자를 위해 1인당 5초의 시간을 절약한다면, 이것은 가치 있는 투자가 될 것이다.시범은 다음과 같다.


발전


입문


다행히도 VS 코드 팀은 가이드 프로젝트를 매우 빠른 과정으로 만들었다.내가 마이크로소프트에 말하고자 하는 것은 그들이 더 좋은 문서에 대한 추진이 확실히 어떤 분야에서 이채를 띠고 있다는 것이다.이것은 그중의 하나다.

얼음 사용을 멈추세요.


나는 마이크로소프트에게 더 중요한 말을 한마디 하려고 한다.

ICE 사용 중지 시작하다


그들의 의사 는 매우 도움이 되니, 나는 세심한 관심을 건의한다.나는 여기서 기본 내용을 소개할 것이다.
Your First Extension

부트 확장


팀 사용 으로 NPM 패키지를 제작하여 Hello World 확장을 생성하고 테스트를 완료했습니다.터미널에서 다음 명령을 사용하여 설치할 수 있습니다(NPM을 사용하는 경우).
npm i -g yo generator-code
이 모든 것을 설정하면 코드를 저장하려는 폴더에서 실행됩니다 SwapTernary.이것은 좋은 시작 템플릿 선택을 제공합니다.
❯ New Extension (TypeScript) 
  New Extension (JavaScript) 
  New Color Theme 
  New Language Support 
  New Code Snippets 
  New Keymap 
  New Extension Pack 
  New Language Pack (Localization) 
나는 첫 번째 옵션을 선택했다.이름, 설명, 리셋 초기화 등도 입력할 수 있습니다. (enter 키를 누르면 기본값으로 들어갑니다. - 언제든지 나중에 내용을 변경할 수 있습니다.)
설치가 완료되면 코드에서 열기yo code.F5를 눌러 디버거를 시작합니다.확장자가 설치된 새 코드 창이 나타납니다.
그런 다음 명령 팔레트(Mac:⇧⌘P、 Windows:^⇧P) 그리고 Hello World를 입력하거나 마지막 단계에서 당신이 지어준 이름을 입력하세요.너는 리턴 키를 누르면 우호적인 팝업 창을 볼 수 있을 것이다.
yeoman

코드를 작성합시다.


삼원조를 교환하려면 선택한 텍스트를 편집해야 한다는 것을 알고 있습니다.팀은 이미 우리를 위해 를 작성하여 우리에게 사용하도록 제공하였다.src/extension.ts 어때요?이것은 매우 희망적인 것 같다.나에게 있어서 그것은 완벽하다. - 선택한 텍스트의 확장을 반전시킬 수 있다.다음 내용은 참고용으로만 제공됩니다.
// extension.ts
export function activate(context: vscode.ExtensionContext) {
  const disposable = vscode.commands.registerCommand('extension.reverseWord', function () {
    // Get the active text editor
    const editor = vscode.window.activeTextEditor;

    if (editor) {
      const { document, selection } = editor;

      // Get the word within the selection
      const word = document.getText(selection);
      const reversed = word.split('').reverse().join('');
      editor.edit(editBuilder => {
        editBuilder.replace(selection, reversed);
      });
    }
  });

  context.subscriptions.push(disposable);
}
여기에는 유용한 정보가 매우 많다.
  • 확장자는 document-editing-sample라는 함수에 포장해야 합니다. 이 함수는 편집기 상하문을 매개 변수로 합니다.
  • 코드는 activate 명령을 통해 변수로 등록하고 저장해야 합니다.
  • 이 변수를 registerCommand 그룹으로 보내야 합니다. 그 중에서 VS 코드 관리 활동이 확장됩니다.
  • 새 확장에 이미 모든 템플릿이 있습니다.
  • context.subscriptions는 우리의 접점이다.문자열 하나와 함수 두 개의 매개 변수가 있습니다.우리 먼저 줄을 이야기합시다.
  • repo with ~50 sample extensions

    명령 문자열


    명령 문자열의 형식은 registerCommand 입니다.저는 <publisher>.<commandName>입니다.
    출판사는 너야.Azure DevOps 계정이 없으면 지금 변경하지 마십시오.우리는 다음 글에서 어떻게 출판사를 만드는지 소개할 것이다.
    a256hz.swapTernary를 입력합니다.간단한 알파벳 문자열을 사용합니다.이제 commandNamepackage.json 에 두 번 전체 명령 문자열을 추가합니다.
    // package.json
    ...
      "activationEvents": [
        "onCommand:256hz.swapTernary"
      ],
    ...
      "contributes": {
        "commands": [
          {
            "command": "256hz.swapTernary",
            "title": "Swap Ternary"
          }
        ]
      },
    
    명령 문자열이 모든 세 위치에서 동일한지 확인하십시오. 그렇지 않으면 아무것도 작용하지 않습니다.만약 네가 나처럼 명령의 이름을 50번 변경한다면, 이 점은 특히 정확하다.
    위의 activationEvents 필드는 명령 팔레트에 표시되는 우호적인 이름입니다.
    키 바인딩을 추가할 수도 있습니다. 예는 을 참조하십시오.
    my package.json

    사용자 정의 함수


    지금은 contributes.commands 부분입니다.어, 기능.이것은 당신의 명령의 입구점입니다.
        const editor = vscode.window.activeTextEditor;
    
    이것은 우리로 하여금 활동 편집기 환경에 접근할 수 있게 한다.
        if (editor) {
          const { document, selection } = editor;
    
    우리의 편집기 상하문에는 titlefun 이 있다.차갑다참고로 이것은 원시 텍스트가 아닙니다. - 그것들은 documentselection류의 실례입니다.모든 것은 특수한 방법과 속성이 있다.
          const word = document.getText(selection);
    
    이것이 바로 우리가 원시 텍스트를 얻는 방식이다.Document에는 Selection의 시작과 끝 위치를 가리키는 바늘이 포함되어 있으며, 문서는 이 바늘을 가져와 그 사이의 내용을 제공합니다.
    이제 텍스트에서 모든 논리를 실행할 수 있습니다. 확장된 모든 작업은 이 단계에서 진행됩니다.이 예에서는 텍스트를 반전합니다.
          const reversed = word.split('').reverse().join('');
    
    그리고 우리는 활동 편집기의 Selection 방법을 사용하여 기존의 것을 대체한다.Document 리셋을 받아들여 edit라고 불리는 내용을 전입한다.
          editor.edit(editBuilder => {
            editBuilder.replace(selection, reversed);
          });
    
    edit 두 개의 매개 변수를 받아들인다. aeditBuilder와 우리의 새로운 원시 텍스트.editBuilder.replace 이미 잘 됐어요. - 위Selection에서 해구했어요.그래서 당신이 지금 해야 할 일은 텍스트를 처리하고 두 번째 매개 변수로 전달하는 것입니다.
    확장을 위한 일련의 문자열 작업이 필요합니다.
  • 문장을 조건, 진/가짜 자구와 격식으로 분할한다.
  • 문자열의 중간에 있는지 추적합니다. 그러면 selection 문자가 문법으로 잘못 해석되지 않습니다.
  • 끼워 넣은 삼원조를 추적하기 때문에 우리는 가장 바깥쪽의 표현식만 교환한다.
  • 표현식이 올바르게 해석되지 않으면 오류 모드가 표시됩니다.
  • 만약 당신이 흥미가 있다면, 기꺼이 이 질문에 대답하거나, 당신은 할 수 있습니다.
    이게 다 발전을 위한 거야!이제 확장을 발표합시다.섹션 2로 이동합니다.
    표지 사진: check out the repo

    좋은 웹페이지 즐겨찾기