Как я могу автоматически вставлять точки с запятой в каждое необязательное место при наборе текста?
Резюме
Недавно я обнаружил, что 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,
}
Воссоздание поведения: инструкции
Введите и нажмите ENTER.
• Обратите внимание на успешную вставку точки с запятой.
Введите и нажмите ENTER.
Введите и нажмите ENTER.
• Обратите внимание, что пропущенная точка с запятой игнорируется форматировщиком.
Тип
и нажмите ENTER. Нажмите клавишу DELETE, чтобы удалить новую строку между закрывающей скобкой и курсором.
• Закрывающая фигурная скобка и курсор теперь должны находиться на одной строке.
Нажмите клавишу DELETE, чтобы удалить пробел между курсором и закрывающей скобкой.
Введите и нажмите ENTER.
• Обратите внимание на успешную вставку точки с запятой.
Щелкните левой кнопкой мыши, чтобы поместить курсор в правую часть закрывающей скобки в строке 7, и нажмите ENTER.
Введите и нажмите ENTER.
• Обратите внимание на успешную вставку точки с запятой.
Щелкните левой кнопкой мыши, чтобы снова поместить курсор справа от закрывающей скобки в строке 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();