MCPcopy Create free account
hub / github.com/microsoft/typescript-go / scanNumberFragment

Method scanNumberFragment

internal/scanner/scanner.go:2044–2088  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2042}
2043
2044func (s *Scanner) scanNumberFragment() string {
2045 start := s.pos
2046 allowSeparator := false
2047 isPreviousTokenSeparator := false
2048 var result strings.Builder
2049 for {
2050 before := s.pos
2051 s.scanASCIIWhile(func(b byte) bool {
2052 return b >= '0' && b <= '9'
2053 })
2054 if s.pos > before {
2055 allowSeparator = true
2056 isPreviousTokenSeparator = false
2057 }
2058 ch := s.char()
2059 if ch == '_' {
2060 s.tokenFlags |= ast.TokenFlagsContainsSeparator
2061 if allowSeparator {
2062 allowSeparator = false
2063 isPreviousTokenSeparator = true
2064 result.WriteString(s.text[start:s.pos])
2065 } else {
2066 s.tokenFlags |= ast.TokenFlagsContainsInvalidSeparator
2067 if isPreviousTokenSeparator {
2068 s.errorAt(diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted, s.pos, 1)
2069 } else {
2070 s.errorAt(diagnostics.Numeric_separators_are_not_allowed_here, s.pos, 1)
2071 }
2072 }
2073 s.pos++
2074 start = s.pos
2075 continue
2076 }
2077 break
2078 }
2079 if isPreviousTokenSeparator {
2080 s.tokenFlags |= ast.TokenFlagsContainsInvalidSeparator
2081 s.errorAt(diagnostics.Numeric_separators_are_not_allowed_here, s.pos-1, 1)
2082 }
2083 if result.Len() == 0 {
2084 return s.text[start:s.pos]
2085 }
2086 result.WriteString(s.text[start:s.pos])
2087 return result.String()
2088}
2089
2090func (s *Scanner) scanDigits() (string, bool) {
2091 start := s.pos

Callers 1

scanNumberMethod · 0.95

Calls 5

scanASCIIWhileMethod · 0.95
charMethod · 0.95
errorAtMethod · 0.95
LenMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected