Как я могу автоматически вставлять точки с запятой в каждое необязательное место при наборе текста?

Резюме


Недавно я обнаружил, что VSCode имеет эту замечательную функцию, которая позволяет вам определять точно настроенное автоматическое поведение с пробелами и опциональную обработку символов, которые применяются к вашему коду в реальном времени по мере ввода.

Это то, чего не хватало в моей жизни. Не всегда понятно, как парсер будет вставлять точки с запятой, поэтому рекомендуется всегда вставлять точки с запятой самостоятельно. Но это может быть обременительным, особенно когда оно существует:

К сожалению, я не могу заставить его дать те результаты, которые он рекламирует. Смотрите ниже для получения дополнительной информации.

Демонстрация непоследовательного поведения


Воссоздание поведения: Настройки


          {
        //  Relevant, Possibly Relevant
        "editor.acceptSuggestionOnCommitCharacter": true,
        "editor.detectIndentation": false,
        "editor.formatOnPaste": true,
        "editor.formatOnSave": true,
        "editor.formatOnType": true,
        "editor.insertSpaces": false,   
        "editor.trimAutoWhitespace": false,
        "javascript.format.enable": true,
        "javascript.format.insertSpaceAfterCommaDelimiter": true,
        "javascript.format.insertSpaceAfterConstructor": true,
        "javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true,
        "javascript.format.insertSpaceAfterKeywordsInControlFlowStatements": true,
        "javascript.format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces": false,
        "javascript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces": false,
        "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": true,
        "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets": true,
        "javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": true,
        "javascript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces": false,
        "javascript.format.insertSpaceAfterSemicolonInForStatements": true,
        "javascript.format.insertSpaceBeforeAndAfterBinaryOperators": true,
        "javascript.format.insertSpaceBeforeFunctionParenthesis": true,
        "javascript.format.placeOpenBraceOnNewLineForControlBlocks": false,
        "javascript.format.placeOpenBraceOnNewLineForFunctions": false,
        "javascript.format.semicolons": "insert",

        //  Not Relevant, Probably Not Relevant
        "editor.foldingHighlight": false,
        "editor.fontFamily": "'Cascadia Mono', 'tic-80 font', 'Courier New', monospace",
        "editor.fontSize": 13,
        "editor.glyphMargin": false,
        "editor.letterSpacing": 0,
        "editor.lineHeight": 2.5,
        "editor.lineNumbers": "on",
        "editor.matchBrackets": "never",
        "editor.minimap.renderCharacters": false,
        "editor.occurrencesHighlight": false,
        "editor.renderControlCharacters": true,
        "editor.renderWhitespace": "selection",
        "editor.scrollbar.verticalScrollbarSize": 0,
        "editor.smoothScrolling": true,
        "editor.tabSize": 4,
        "editor.tokenColorCustomizations": {
            "comments": "#16662B"
        },
        "editor.wordWrap": "wordWrapColumn",
        "editor.wordWrapColumn": 108,
        "editor.wrappingIndent": "same",
        "subtleBrackets.disableNative": false,
        "subtleBrackets.style": {
            "borderWidth": "2px",
            "borderColor": "#528BFF"
        },
        "terminal.integrated.cursorBlinking": true,
        "terminal.integrated.cursorStyle": "line",
        "terminal.integrated.cursorWidth": 2,
        "terminal.integrated.defaultLocation": "editor",
        "terminal.integrated.fontFamily": "tic-80 font",
        "terminal.integrated.fontSize": 12,
        "terminal.integrated.lineHeight": 1.75,
        "window.menuBarVisibility": "toggle",
        "window.titleBarStyle": "native",
        "workbench.colorCustomizations": {
            "[CyberWave]": {
                "statusBar.noFolderBackground": "#FFB608",
                "statusBar.noFolderBorder": "#FFB608",
                "statusBar.noFolderForeground": "#000000",
                "statusBarItem.hoverBackground": "#ff0000"
            }
        },
        "workbench.colorTheme": "CyberWave",
        "workbench.editor.showTabs": true,
    }

Воссоздание поведения: инструкции


  1. Введите и нажмите ENTER.

    Обратите внимание на успешную вставку точки с запятой.


  1. Введите и нажмите ENTER.

    Введите и нажмите ENTER.

    Обратите внимание, что пропущенная точка с запятой игнорируется форматировщиком.


  1. Тип и нажмите ENTER.

    Нажмите клавишу DELETE, чтобы удалить новую строку между закрывающей скобкой и курсором.

    Закрывающая фигурная скобка и курсор теперь должны находиться на одной строке.

    Нажмите клавишу DELETE, чтобы удалить пробел между курсором и закрывающей скобкой.

    Введите и нажмите ENTER.

    Обратите внимание на успешную вставку точки с запятой.


  1. Щелкните левой кнопкой мыши, чтобы поместить курсор в правую часть закрывающей скобки в строке 7, и нажмите ENTER.

    Введите и нажмите ENTER.

    Обратите внимание на успешную вставку точки с запятой.


  1. Щелкните левой кнопкой мыши, чтобы снова поместить курсор справа от закрывающей скобки в строке 7, и нажмите ENTER.

    Тип и нажмите ENTER.

    Обратите внимание, что пропущенная точка с запятой снова игнорируется форматировщиком.

Ожидаемые результаты


      console.log();          // Semicolon
{
    console.log();      // Semicolon
    {
        console.log();  // Semicolon
    }
}
console.log();          // Semicolon

console.log();          // Semicolon

Фактические результаты


      console.log();
{
    console.log()       // No semicolon
    {
        console.log();
    }
}
console.log()           // No semicolon

console.log();

0 ответов