vendor tsgo
This commit is contained in:
141
tools/tsgo/internal/ls/lsutil/formatcodeoptions.go
Normal file
141
tools/tsgo/internal/ls/lsutil/formatcodeoptions.go
Normal file
@@ -0,0 +1,141 @@
|
||||
package lsutil
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/microsoft/typescript-go/internal/core"
|
||||
"github.com/microsoft/typescript-go/internal/lsp/lsproto"
|
||||
"github.com/microsoft/typescript-go/internal/printer"
|
||||
)
|
||||
|
||||
type IndentStyle int
|
||||
|
||||
const (
|
||||
IndentStyleNone IndentStyle = iota
|
||||
IndentStyleBlock
|
||||
IndentStyleSmart
|
||||
)
|
||||
|
||||
func parseIndentStyle(v any) IndentStyle {
|
||||
switch s := v.(type) {
|
||||
case string:
|
||||
switch strings.ToLower(s) {
|
||||
case "none":
|
||||
return IndentStyleNone
|
||||
case "block":
|
||||
return IndentStyleBlock
|
||||
case "smart":
|
||||
return IndentStyleSmart
|
||||
}
|
||||
case float64:
|
||||
return IndentStyle(int(s))
|
||||
case int:
|
||||
return IndentStyle(s)
|
||||
}
|
||||
return IndentStyleSmart
|
||||
}
|
||||
|
||||
type SemicolonPreference string
|
||||
|
||||
const (
|
||||
SemicolonPreferenceIgnore SemicolonPreference = "ignore"
|
||||
SemicolonPreferenceInsert SemicolonPreference = "insert"
|
||||
SemicolonPreferenceRemove SemicolonPreference = "remove"
|
||||
)
|
||||
|
||||
func parseSemicolonPreference(v any) SemicolonPreference {
|
||||
if s, ok := v.(string); ok {
|
||||
switch strings.ToLower(s) {
|
||||
case "ignore":
|
||||
return SemicolonPreferenceIgnore
|
||||
case "insert":
|
||||
return SemicolonPreferenceInsert
|
||||
case "remove":
|
||||
return SemicolonPreferenceRemove
|
||||
}
|
||||
}
|
||||
return SemicolonPreferenceIgnore
|
||||
}
|
||||
|
||||
type EditorSettings struct {
|
||||
BaseIndentSize int `raw:"baseIndentSize" config:"format.baseIndentSize"`
|
||||
IndentSize int `raw:"indentSize" config:"format.indentSize"`
|
||||
TabSize int `raw:"tabSize" config:"format.tabSize"`
|
||||
NewLineCharacter string `raw:"newLineCharacter" config:"format.newLineCharacter"`
|
||||
ConvertTabsToSpaces core.Tristate `raw:"convertTabsToSpaces" config:"format.convertTabsToSpaces"`
|
||||
IndentStyle IndentStyle `raw:"indentStyle" config:"format.indentStyle"`
|
||||
TrimTrailingWhitespace core.Tristate `raw:"trimTrailingWhitespace" config:"format.trimTrailingWhitespace"`
|
||||
}
|
||||
|
||||
type FormatCodeSettings struct {
|
||||
EditorSettings
|
||||
InsertSpaceAfterCommaDelimiter core.Tristate `raw:"insertSpaceAfterCommaDelimiter" config:"format.insertSpaceAfterCommaDelimiter"`
|
||||
InsertSpaceAfterSemicolonInForStatements core.Tristate `raw:"insertSpaceAfterSemicolonInForStatements" config:"format.insertSpaceAfterSemicolonInForStatements"`
|
||||
InsertSpaceBeforeAndAfterBinaryOperators core.Tristate `raw:"insertSpaceBeforeAndAfterBinaryOperators" config:"format.insertSpaceBeforeAndAfterBinaryOperators"`
|
||||
InsertSpaceAfterConstructor core.Tristate `raw:"insertSpaceAfterConstructor" config:"format.insertSpaceAfterConstructor"`
|
||||
InsertSpaceAfterKeywordsInControlFlowStatements core.Tristate `raw:"insertSpaceAfterKeywordsInControlFlowStatements" config:"format.insertSpaceAfterKeywordsInControlFlowStatements"`
|
||||
InsertSpaceAfterFunctionKeywordForAnonymousFunctions core.Tristate `raw:"insertSpaceAfterFunctionKeywordForAnonymousFunctions" config:"format.insertSpaceAfterFunctionKeywordForAnonymousFunctions"`
|
||||
InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis core.Tristate `raw:"insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis" config:"format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"`
|
||||
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets core.Tristate `raw:"insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets" config:"format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"`
|
||||
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBraces core.Tristate `raw:"insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces" config:"format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"`
|
||||
InsertSpaceAfterOpeningAndBeforeClosingEmptyBraces core.Tristate `raw:"insertSpaceAfterOpeningAndBeforeClosingEmptyBraces" config:"format.insertSpaceAfterOpeningAndBeforeClosingEmptyBraces"`
|
||||
InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces core.Tristate `raw:"insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces" config:"format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"`
|
||||
InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces core.Tristate `raw:"insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces" config:"format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"`
|
||||
InsertSpaceAfterTypeAssertion core.Tristate `raw:"insertSpaceAfterTypeAssertion" config:"format.insertSpaceAfterTypeAssertion"`
|
||||
InsertSpaceBeforeFunctionParenthesis core.Tristate `raw:"insertSpaceBeforeFunctionParenthesis" config:"format.insertSpaceBeforeFunctionParenthesis"`
|
||||
PlaceOpenBraceOnNewLineForFunctions core.Tristate `raw:"placeOpenBraceOnNewLineForFunctions" config:"format.placeOpenBraceOnNewLineForFunctions"`
|
||||
PlaceOpenBraceOnNewLineForControlBlocks core.Tristate `raw:"placeOpenBraceOnNewLineForControlBlocks" config:"format.placeOpenBraceOnNewLineForControlBlocks"`
|
||||
InsertSpaceBeforeTypeAnnotation core.Tristate `raw:"insertSpaceBeforeTypeAnnotation" config:"format.insertSpaceBeforeTypeAnnotation"`
|
||||
IndentMultiLineObjectLiteralBeginningOnBlankLine core.Tristate `raw:"indentMultiLineObjectLiteralBeginningOnBlankLine" config:"format.indentMultiLineObjectLiteralBeginningOnBlankLine"`
|
||||
Semicolons SemicolonPreference `raw:"semicolons" config:"format.semicolons"`
|
||||
IndentSwitchCase core.Tristate `raw:"indentSwitchCase" config:"format.indentSwitchCase"`
|
||||
}
|
||||
|
||||
func FromLSFormatOptions(f FormatCodeSettings, opt *lsproto.FormattingOptions) FormatCodeSettings {
|
||||
updatedSettings := f
|
||||
updatedSettings.TabSize = int(opt.TabSize)
|
||||
updatedSettings.IndentSize = int(opt.TabSize)
|
||||
updatedSettings.ConvertTabsToSpaces = core.BoolToTristate(opt.InsertSpaces)
|
||||
if opt.TrimTrailingWhitespace != nil {
|
||||
updatedSettings.TrimTrailingWhitespace = core.BoolToTristate(*opt.TrimTrailingWhitespace)
|
||||
}
|
||||
return updatedSettings
|
||||
}
|
||||
|
||||
func (settings FormatCodeSettings) ToLSFormatOptions() *lsproto.FormattingOptions {
|
||||
trimTrailingWhitespace := settings.TrimTrailingWhitespace.IsTrue()
|
||||
return &lsproto.FormattingOptions{
|
||||
TabSize: uint32(settings.TabSize),
|
||||
InsertSpaces: settings.ConvertTabsToSpaces.IsTrue(),
|
||||
TrimTrailingWhitespace: &trimTrailingWhitespace,
|
||||
}
|
||||
}
|
||||
|
||||
func GetDefaultFormatCodeSettings() FormatCodeSettings {
|
||||
return FormatCodeSettings{
|
||||
EditorSettings: EditorSettings{
|
||||
IndentSize: printer.GetDefaultIndentSize(),
|
||||
TabSize: printer.GetDefaultIndentSize(),
|
||||
NewLineCharacter: "\n",
|
||||
ConvertTabsToSpaces: core.TSTrue,
|
||||
IndentStyle: IndentStyleSmart,
|
||||
TrimTrailingWhitespace: core.TSTrue,
|
||||
},
|
||||
InsertSpaceAfterConstructor: core.TSFalse,
|
||||
InsertSpaceAfterCommaDelimiter: core.TSTrue,
|
||||
InsertSpaceAfterSemicolonInForStatements: core.TSTrue,
|
||||
InsertSpaceBeforeAndAfterBinaryOperators: core.TSTrue,
|
||||
InsertSpaceAfterKeywordsInControlFlowStatements: core.TSTrue,
|
||||
InsertSpaceAfterFunctionKeywordForAnonymousFunctions: core.TSFalse,
|
||||
InsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: core.TSFalse,
|
||||
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: core.TSFalse,
|
||||
InsertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: core.TSTrue,
|
||||
InsertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: core.TSFalse,
|
||||
InsertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: core.TSFalse,
|
||||
InsertSpaceBeforeFunctionParenthesis: core.TSFalse,
|
||||
PlaceOpenBraceOnNewLineForFunctions: core.TSFalse,
|
||||
PlaceOpenBraceOnNewLineForControlBlocks: core.TSFalse,
|
||||
Semicolons: SemicolonPreferenceIgnore,
|
||||
IndentSwitchCase: core.TSTrue,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user