Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
07b3ca6
feat: completion snippets
a-tarasyuk May 17, 2026
a3cb242
Merge branch 'main' into feat/completion-snippets
a-tarasyuk May 18, 2026
04ad494
Merge branch 'main' into feat/completion-snippets
a-tarasyuk May 18, 2026
cbc395a
align completion text edits with insert text
a-tarasyuk May 19, 2026
cc3578f
Merge branch 'feat/completion-snippets' of https://github.com/a-taras…
a-tarasyuk May 19, 2026
3684de9
Merge branch 'main' of https://github.com/microsoft/typescript-go int…
a-tarasyuk May 19, 2026
b4486c9
Merge branch 'main' into feat/completion-snippets
a-tarasyuk May 20, 2026
9100426
Merge branch 'main' of https://github.com/microsoft/typescript-go int…
a-tarasyuk Jun 9, 2026
c3fb785
Merge branch 'feat/completion-snippets' of https://github.com/a-taras…
a-tarasyuk Jun 9, 2026
9565f47
fix formatting
a-tarasyuk Jun 9, 2026
a8302e0
add clientCapabilities support
a-tarasyuk Jun 9, 2026
c5ea81c
remove ambient || abstract duplicates
a-tarasyuk Jun 9, 2026
6fecd33
remove server-side completion capability test override
a-tarasyuk Jun 9, 2026
6547140
Merge branch 'main' of https://github.com/microsoft/typescript-go int…
a-tarasyuk Jun 9, 2026
24caea3
use scoped fourslash tests
a-tarasyuk Jun 10, 2026
b686dd4
Merge branch 'main' of https://github.com/microsoft/typescript-go int…
a-tarasyuk Jun 10, 2026
4823a94
fix script type error
a-tarasyuk Jun 10, 2026
cf28dfe
omit default capabilities options
a-tarasyuk Jun 10, 2026
7a68430
avoid marking reused import type qualifiers as synthesized
a-tarasyuk Jun 10, 2026
60c60ef
check member parent before adding override modifier
a-tarasyuk Jun 10, 2026
b67a7aa
cleanup
a-tarasyuk Jun 10, 2026
003ac7a
handle auto import errors
a-tarasyuk Jun 10, 2026
6b7d70b
match strada object literal method completion filtering
a-tarasyuk Jun 10, 2026
baa9497
add OmitTrailingSemicolon support
a-tarasyuk Jun 10, 2026
92b1243
add snippet tab stop element support
a-tarasyuk Jun 10, 2026
1dc2704
add semicolon writer
a-tarasyuk Jun 10, 2026
1ce76e7
fix formatting
a-tarasyuk Jun 10, 2026
f70b1ad
update tests
a-tarasyuk Jun 10, 2026
172d9f7
update failing tests
a-tarasyuk Jun 10, 2026
95a04b5
remove GetDefaultCapabilitiesWithSnippetSupport helper
a-tarasyuk Jun 11, 2026
95ab86b
add commitSemicolon
a-tarasyuk Jun 11, 2026
fc45531
Merge branch 'main' of https://github.com/microsoft/typescript-go int…
a-tarasyuk Jul 4, 2026
cb13b5f
update fourslash converter
a-tarasyuk Jul 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
162 changes: 16 additions & 146 deletions internal/checker/printer.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,18 @@ func createPrinterWithRemoveComments(emitContext *printer.EmitContext) *printer.
return printer.NewPrinter(printer.PrinterOptions{RemoveComments: true}, printer.PrintHandlers{}, emitContext)
}

func createPrinterWithRemoveCommentsOmitTrailingSemicolon(emitContext *printer.EmitContext) *printer.Printer {
return printer.NewPrinter(printer.PrinterOptions{
RemoveComments: true,
OmitTrailingSemicolon: true,
}, printer.PrintHandlers{}, emitContext)
}

func createPrinterWithRemoveCommentsOmitTrailingSemicolonNeverAsciiEscape(emitContext *printer.EmitContext) *printer.Printer {
// TODO: OmitTrailingSemicolon support
return printer.NewPrinter(printer.PrinterOptions{
RemoveComments: true,
NeverAsciiEscape: true,
RemoveComments: true,
OmitTrailingSemicolon: true,
NeverAsciiEscape: true,
}, printer.PrintHandlers{}, emitContext)
}

Expand All @@ -33,143 +40,6 @@ func createPrinterWithRemoveCommentsNeverAsciiEscape(emitContext *printer.EmitCo
}, printer.PrintHandlers{}, emitContext)
}

type semicolonRemoverWriter struct {
hasPendingSemicolon bool
inner printer.EmitTextWriter
}

func (s *semicolonRemoverWriter) commitSemicolon() {
if s.hasPendingSemicolon {
s.inner.WriteTrailingSemicolon(";")
s.hasPendingSemicolon = false
}
}

func (s *semicolonRemoverWriter) Clear() {
s.inner.Clear()
}

func (s *semicolonRemoverWriter) DecreaseIndent() {
s.commitSemicolon()
s.inner.DecreaseIndent()
}

func (s *semicolonRemoverWriter) GetColumn() core.UTF16Offset {
return s.inner.GetColumn()
}

func (s *semicolonRemoverWriter) GetIndent() int {
return s.inner.GetIndent()
}

func (s *semicolonRemoverWriter) GetLine() int {
return s.inner.GetLine()
}

func (s *semicolonRemoverWriter) GetTextPos() int {
return s.inner.GetTextPos()
}

func (s *semicolonRemoverWriter) HasTrailingComment() bool {
return s.inner.HasTrailingComment()
}

func (s *semicolonRemoverWriter) HasTrailingWhitespace() bool {
return s.inner.HasTrailingWhitespace()
}

func (s *semicolonRemoverWriter) IncreaseIndent() {
s.commitSemicolon()
s.inner.IncreaseIndent()
}

func (s *semicolonRemoverWriter) IsAtStartOfLine() bool {
return s.inner.IsAtStartOfLine()
}

func (s *semicolonRemoverWriter) RawWrite(s1 string) {
s.commitSemicolon()
s.inner.RawWrite(s1)
}

func (s *semicolonRemoverWriter) String() string {
s.commitSemicolon()
return s.inner.String()
}

func (s *semicolonRemoverWriter) Write(s1 string) {
s.commitSemicolon()
s.inner.Write(s1)
}

func (s *semicolonRemoverWriter) WriteComment(text string) {
s.commitSemicolon()
s.inner.WriteComment(text)
}

func (s *semicolonRemoverWriter) WriteKeyword(text string) {
s.commitSemicolon()
s.inner.WriteKeyword(text)
}

func (s *semicolonRemoverWriter) WriteLine() {
s.commitSemicolon()
s.inner.WriteLine()
}

func (s *semicolonRemoverWriter) WriteLineForce(force bool) {
s.commitSemicolon()
s.inner.WriteLineForce(force)
}

func (s *semicolonRemoverWriter) WriteLiteral(s1 string) {
s.commitSemicolon()
s.inner.WriteLiteral(s1)
}

func (s *semicolonRemoverWriter) WriteOperator(text string) {
s.commitSemicolon()
s.inner.WriteOperator(text)
}

func (s *semicolonRemoverWriter) WriteParameter(text string) {
s.commitSemicolon()
s.inner.WriteParameter(text)
}

func (s *semicolonRemoverWriter) WriteProperty(text string) {
s.commitSemicolon()
s.inner.WriteProperty(text)
}

func (s *semicolonRemoverWriter) WritePunctuation(text string) {
s.commitSemicolon()
s.inner.WritePunctuation(text)
}

func (s *semicolonRemoverWriter) WriteSpace(text string) {
s.commitSemicolon()
s.inner.WriteSpace(text)
}

func (s *semicolonRemoverWriter) WriteStringLiteral(text string) {
s.commitSemicolon()
s.inner.WriteStringLiteral(text)
}

func (s *semicolonRemoverWriter) WriteSymbol(text string, symbol *ast.Symbol) {
s.commitSemicolon()
s.inner.WriteSymbol(text, symbol)
}

func (s *semicolonRemoverWriter) WriteTrailingSemicolon(text string) {
s.hasPendingSemicolon = true
}

func getTrailingSemicolonDeferringWriter(writer printer.EmitTextWriter) printer.EmitTextWriter {
return &semicolonRemoverWriter{false, writer}
}

func (c *Checker) TypeToString(t *Type) string {
return c.typeToString(t, nil)
}
Expand Down Expand Up @@ -290,9 +160,9 @@ func (c *Checker) symbolToStringEx(symbol *ast.Symbol, enclosingDeclaration *ast
var printer_ *printer.Printer
// add neverAsciiEscape for GH#39027
if enclosingDeclaration != nil && enclosingDeclaration.Kind == ast.KindSourceFile {
printer_ = createPrinterWithRemoveCommentsNeverAsciiEscape(nodeBuilder.EmitContext())
printer_ = createPrinterWithRemoveCommentsOmitTrailingSemicolonNeverAsciiEscape(nodeBuilder.EmitContext())
} else {
printer_ = createPrinterWithRemoveComments(nodeBuilder.EmitContext())
printer_ = createPrinterWithRemoveCommentsOmitTrailingSemicolon(nodeBuilder.EmitContext())
}

var builder func(symbol *ast.Symbol, meaning ast.SymbolFlags, enclosingDeclaration *ast.Node, flags nodebuilder.Flags, internalFlags nodebuilder.InternalFlags, tracker nodebuilder.SymbolTracker) *ast.Node
Expand All @@ -301,8 +171,8 @@ func (c *Checker) symbolToStringEx(symbol *ast.Symbol, enclosingDeclaration *ast
} else {
builder = nodeBuilder.SymbolToEntityName
}
entity := builder(symbol, meaning, enclosingDeclaration, nodeFlags, internalNodeFlags, nil) // TODO: GH#18217
printer_.Write(entity /*sourceFile*/, sourceFile, getTrailingSemicolonDeferringWriter(writer), nil) // TODO: GH#18217
entity := builder(symbol, meaning, enclosingDeclaration, nodeFlags, internalNodeFlags, nil) // TODO: GH#18217
printer_.Write(entity /*sourceFile*/, sourceFile, writer, nil) // TODO: GH#18217
return writer.String()
}

Expand Down Expand Up @@ -347,12 +217,12 @@ func (c *Checker) signatureToStringEx(signature *Signature, enclosingDeclaration
}
if flags&TypeFormatFlagsMultilineObjectLiterals != 0 {
writer := printer.NewTextWriter("\n", 0)
p.Write(sig, sourceFile, getTrailingSemicolonDeferringWriter(writer), nil)
p.Write(sig, sourceFile, writer, nil)
return writer.String()
}
writer, putWriter := printer.GetSingleLineStringWriter()
defer putWriter()
p.Write(sig, sourceFile, getTrailingSemicolonDeferringWriter(writer), nil)
p.Write(sig, sourceFile, writer, nil)
return writer.String()
}

Expand Down
Loading