mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-28 04:45:05 +00:00
Suppress extra indent after the end of dot chains
This commit is contained in:
parent
492b3deba7
commit
1c454736a4
1 changed files with 70 additions and 48 deletions
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue