2025-11-08 09:37:30 +03:00

68 lines
1.8 KiB
Go

package scanner
import (
"strings"
"unicode/utf8"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ast"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/core"
)
func tokenIsIdentifierOrKeyword(token ast.Kind) bool {
return token >= ast.KindIdentifier
}
func IdentifierToKeywordKind(node *ast.Identifier) ast.Kind {
return textToKeyword[node.Text]
}
func GetSourceTextOfNodeFromSourceFile(sourceFile *ast.SourceFile, node *ast.Node, includeTrivia bool) string {
return GetTextOfNodeFromSourceText(sourceFile.Text(), node, includeTrivia)
}
func GetTextOfNodeFromSourceText(sourceText string, node *ast.Node, includeTrivia bool) string {
if ast.NodeIsMissing(node) {
return ""
}
pos := node.Pos()
if !includeTrivia {
pos = SkipTrivia(sourceText, pos)
}
text := sourceText[pos:node.End()]
// if (isJSDocTypeExpressionOrChild(node)) {
// // strip space + asterisk at line start
// text = text.split(/\r\n|\n|\r/).map(line => line.replace(/^\s*\*/, "").trimStart()).join("\n");
// }
return text
}
func GetTextOfNode(node *ast.Node) string {
return GetSourceTextOfNodeFromSourceFile(ast.GetSourceFileOfNode(node), node, false /*includeTrivia*/)
}
func DeclarationNameToString(name *ast.Node) string {
if name == nil || name.Pos() == name.End() {
return "(Missing)"
}
return GetTextOfNode(name)
}
func IsIdentifierText(name string, languageVariant core.LanguageVariant) bool {
ch, size := utf8.DecodeRuneInString(name)
if !IsIdentifierStart(ch) {
return false
}
for i := size; i < len(name); {
ch, size = utf8.DecodeRuneInString(name[i:])
if !IsIdentifierPartEx(ch, languageVariant) {
return false
}
i += size
}
return true
}
func IsIntrinsicJsxName(name string) bool {
return len(name) != 0 && (name[0] >= 'a' && name[0] <= 'z' || strings.ContainsRune(name, '-'))
}