Suppress extra indent after the end of dot chains

This commit is contained in:
DropDemBits 2023-01-17 15:29:52 -05:00
parent 492b3deba7
commit 1c454736a4
No known key found for this signature in database
GPG key ID: D550F8DFBB392533

View file

@ -86,58 +86,80 @@ export class Config {
* [1]: https://github.com/Microsoft/vscode/issues/11514#issuecomment-244707076 * [1]: https://github.com/Microsoft/vscode/issues/11514#issuecomment-244707076
*/ */
private configureLanguage() { private configureLanguage() {
if (this.typingContinueCommentsOnNewline && !this.configureLang) { if (this.configureLang) return;
let onEnterRules: vscode.OnEnterRule[] = [
{
// Carry indentation from the previous line
beforeText: /^\s*$/,
action: { indentAction: vscode.IndentAction.None },
},
{
// After the end of a function/field chain,
// with the semicolon on the same line
beforeText: /^\s+\..*;/,
action: { indentAction: vscode.IndentAction.Outdent },
},
{
// After the end of a function/field chain,
// with semicolon detached from the rest
beforeText: /^\s+;/,
previousLineText: /^\s+\..*/,
action: { indentAction: vscode.IndentAction.Outdent },
},
];
if (this.typingContinueCommentsOnNewline) {
const indentAction = vscode.IndentAction.None; const indentAction = vscode.IndentAction.None;
this.configureLang = vscode.languages.setLanguageConfiguration("rust", { onEnterRules = [
onEnterRules: [ ...onEnterRules,
{ {
// Doc single-line comment // Doc single-line comment
// e.g. ///| // e.g. ///|
beforeText: /^\s*\/{3}.*$/, beforeText: /^\s*\/{3}.*$/,
action: { indentAction, appendText: "/// " }, action: { indentAction, appendText: "/// " },
},
{
// Parent doc single-line comment
// e.g. //!|
beforeText: /^\s*\/{2}\!.*$/,
action: { indentAction, appendText: "//! " },
},
{
// Begins an auto-closed multi-line comment (standard or parent doc)
// e.g. /** | */ or /*! | */
beforeText: /^\s*\/\*(\*|\!)(?!\/)([^\*]|\*(?!\/))*$/,
afterText: /^\s*\*\/$/,
action: {
indentAction: vscode.IndentAction.IndentOutdent,
appendText: " * ",
}, },
{ },
// Parent doc single-line comment {
// e.g. //!| // Begins a multi-line comment (standard or parent doc)
beforeText: /^\s*\/{2}\!.*$/, // e.g. /** ...| or /*! ...|
action: { indentAction, appendText: "//! " }, beforeText: /^\s*\/\*(\*|\!)(?!\/)([^\*]|\*(?!\/))*$/,
}, action: { indentAction, appendText: " * " },
{ },
// Begins an auto-closed multi-line comment (standard or parent doc) {
// e.g. /** | */ or /*! | */ // Continues a multi-line comment
beforeText: /^\s*\/\*(\*|\!)(?!\/)([^\*]|\*(?!\/))*$/, // e.g. * ...|
afterText: /^\s*\*\/$/, beforeText: /^(\ \ )*\ \*(\ ([^\*]|\*(?!\/))*)?$/,
action: { action: { indentAction, appendText: "* " },
indentAction: vscode.IndentAction.IndentOutdent, },
appendText: " * ", {
}, // Dedents after closing a multi-line comment
}, // e.g. */|
{ beforeText: /^(\ \ )*\ \*\/\s*$/,
// Begins a multi-line comment (standard or parent doc) action: { indentAction, removeText: 1 },
// e.g. /** ...| or /*! ...| },
beforeText: /^\s*\/\*(\*|\!)(?!\/)([^\*]|\*(?!\/))*$/, ];
action: { indentAction, appendText: " * " },
},
{
// Continues a multi-line comment
// e.g. * ...|
beforeText: /^(\ \ )*\ \*(\ ([^\*]|\*(?!\/))*)?$/,
action: { indentAction, appendText: "* " },
},
{
// Dedents after closing a multi-line comment
// e.g. */|
beforeText: /^(\ \ )*\ \*\/\s*$/,
action: { indentAction, removeText: 1 },
},
],
});
}
if (!this.typingContinueCommentsOnNewline && this.configureLang) {
this.configureLang.dispose();
this.configureLang = undefined;
} }
this.configureLang = vscode.languages.setLanguageConfiguration("rust", {
onEnterRules,
});
} }
// We don't do runtime config validation here for simplicity. More on stackoverflow: // We don't do runtime config validation here for simplicity. More on stackoverflow: