github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/arm/parser/armjson/parse_comment.go (about) 1 package armjson 2 3 import ( 4 "strings" 5 6 "github.com/khulnasoft-lab/defsec/pkg/types" 7 ) 8 9 func (p *parser) parseComment(parentMetadata *types.Metadata) (Node, error) { 10 11 if err := p.parseWhitespace(); err != nil { 12 return nil, err 13 } 14 15 _, err := p.next() 16 if err != nil { 17 return nil, err 18 } 19 20 b, err := p.next() 21 if err != nil { 22 return nil, err 23 } 24 25 switch b { 26 case '/': 27 return p.parseLineComment(parentMetadata) 28 case '*': 29 return p.parseBlockComment(parentMetadata) 30 default: 31 return nil, p.makeError("expecting comment delimiter") 32 } 33 } 34 35 func (p *parser) parseLineComment(parentMetadata *types.Metadata) (Node, error) { 36 37 n, _ := p.newNode(KindComment, parentMetadata) 38 39 var sb strings.Builder 40 for { 41 c, err := p.next() 42 if err != nil { 43 return nil, err 44 } 45 if c == '\n' { 46 p.position.Column = 1 47 p.position.Line++ 48 break 49 } 50 sb.WriteRune(c) 51 } 52 53 n.raw = sb.String() 54 n.end = p.position 55 56 if err := p.parseWhitespace(); err != nil { 57 return nil, err 58 } 59 return n, nil 60 } 61 62 func (p *parser) parseBlockComment(parentMetadata *types.Metadata) (Node, error) { 63 64 n, _ := p.newNode(KindComment, parentMetadata) 65 66 var sb strings.Builder 67 68 for { 69 c, err := p.next() 70 if err != nil { 71 return nil, err 72 } 73 if c == '*' { 74 c, err := p.peeker.Peek() 75 if err != nil { 76 return nil, err 77 } 78 if c == '/' { 79 break 80 } 81 sb.WriteRune('*') 82 } else { 83 if c == '\n' { 84 p.position.Column = 1 85 p.position.Line++ 86 } 87 sb.WriteRune(c) 88 } 89 } 90 91 n.raw = sb.String() 92 93 if err := p.parseWhitespace(); err != nil { 94 return nil, err 95 } 96 97 return n, nil 98 }