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  }