code: func (operation *Operation) ParseComment(comment string, astFile *ast.File) error {
  	commentLine := strings.TrimSpace(strings.TrimLeft(comment, "//"))
  	if len(commentLine) == 0 {
  		return nil
  	}
  
  	attribute := strings.Fields(commentLine)[0]
  	lineRemainder := strings.TrimSpace(commentLine[len(attribute):])
  	switch strings.ToLower(attribute) {
  	case "@description":
  		if operation.Description == "" {
  			operation.Description = lineRemainder
  		} else {
  			operation.Description += "\n" + lineRemainder
  		}
  	case "@summary":
  		operation.Summary = lineRemainder
  	case "@id":
  		operation.ID = lineRemainder
  	case "@tags":
  		operation.ParseTagsComment(lineRemainder)
  	case "@accept":
  		if err := operation.ParseAcceptComment(lineRemainder); err != nil {
  			return err
  		}
  	case "@produce":
  		if err := operation.ParseProduceComment(lineRemainder); err != nil {
  			return err
  		}
  	case "@param":
  		if err := operation.ParseParamComment(lineRemainder, astFile); err != nil {
  			return err
  		}
  	case "@success", "@failure":
  		if err := operation.ParseResponseComment(lineRemainder, astFile); err != nil {
  			if err := operation.ParseEmptyResponseComment(lineRemainder); err != nil {
  				if err := operation.ParseEmptyResponseOnly(lineRemainder); err != nil {
  					return err
  				}
  			}
  		}
  	case "@header":
  		if err := operation.ParseResponseHeaderComment(lineRemainder, astFile); err != nil {
  			return err
  		}
  	case "@router":
  		if err := operation.ParseRouterComment(lineRemainder); err != nil {
  			return err
  		}
  	case "@security":
  		if err := operation.ParseSecurityComment(lineRemainder); err != nil {
  			return err
  		}
  	}
  	return nil
  }
docs: // ParseComment parses comment for given comment string and returns error if error occurs.