Wiki

Ticket #283: indent-lit.patch

File indent-lit.patch, 3.4 KB (added by hopscc, 5 years ago)
  • Source/CobraParser.cobra

     
    33783378 
    33793379    def literalList as ListLit 
    33803380        token = .expect('LBRACKET') 
     3381        sail = _spaceAgnosticIndentLevel 
    33813382        exprs = .commaSepExprs('RBRACKET.', true) 
     3383        _adjustForIndents(_spaceAgnosticIndentLevel - sail) 
    33823384        return ListLit(token, exprs) 
    3383  
     3385         
     3386    def _adjustForIndents(extraIndents as int) 
     3387        """ 
     3388        Absorb any trailing dedents due indentation in a commaSepExpr with spaceAgnostic. 
     3389        This allows collectionLit terminating delimiters to be indented wrt line containing  
     3390        leading delimiter. 
     3391        """ 
     3392        if extraIndents >0 and .peek.which == 'EOL' 
     3393            _finishSpaceAgnostic  
     3394            # reassert the trailing EOL the spaceAgnostic cleanup cleared 
     3395            .ungrab 
     3396            .replace(.peek.copy('EOL', '\n')) 
     3397         
    33843398    def literalArray as ArrayLit 
    33853399        token = .expect('ARRAY_OPEN') 
     3400        sail = _spaceAgnosticIndentLevel 
    33863401        exprs = .commaSepExprs('RBRACKET.', true) 
     3402        _adjustForIndents(_spaceAgnosticIndentLevel - sail) 
    33873403        return ArrayLit(token, exprs) 
    33883404 
    33893405    def literalDictOrSet as CompositeLiteral 
     
    34143430                throw Exception('')  # for code flow analysis 
    34153431 
    34163432    def _literalSet(token as IToken, expr as Expr?) as SetLit 
     3433        sail = _spaceAgnosticIndentLevel 
    34173434        if expr 
    34183435            exprs = [expr] 
    34193436            while true 
     
    34293446                _spaceAgnostic 
    34303447                if .optional('RCURLY') 
    34313448                    break 
    3432             return SetLit(token, exprs) 
     3449            litSet = SetLit(token, exprs) 
    34333450        else 
    34343451            .expect('COMMA') 
    34353452            _spaceAgnostic 
    34363453            .expect('RCURLY') 
    3437             return SetLit(token, List<of Expr>()) 
    3438  
     3454            litSet = SetLit(token, List<of Expr>()) 
     3455        _adjustForIndents(_spaceAgnosticIndentLevel - sail) 
     3456        return litSet 
     3457         
    34393458    def _literalDict(token as IToken, expr as Expr?) as DictLit 
     3459        sail = _spaceAgnosticIndentLevel 
    34403460        if expr 
    34413461            expectComma = false 
    34423462            entries = List<of List<of Expr>>() 
     
    34643484                value = .expression 
    34653485                entries.add([key, value]) 
    34663486                expectComma = true 
    3467             return DictLit(token, entries) 
     3487            litDict = DictLit(token, entries) 
    34683488        else 
    34693489            .expect('COLON') 
    34703490            _spaceAgnostic 
    34713491            .expect('RCURLY') 
    3472             return DictLit(token, List<of List<of Expr>>()) 
    3473          
     3492            litDict = DictLit(token, List<of List<of Expr>>()) 
     3493        _adjustForIndents(_spaceAgnosticIndentLevel - sail) 
     3494        return litDict 
     3495             
    34743496    def nameExpr as NameExpr 
    34753497        nameToken = .expect('ID') 
    34763498        name = nameToken.text 
  • Tests/320-misc-two/450-list-lit-indent.cobra

     
     1# indented closing delimiter gave parse error - tkt:283 
     2class ListIndent 
     3 
     4    var t = [ 0, 1, 3 
     5        ] 
     6    var aa= @[1,2,3 
     7        ] 
     8     
     9    var obj as Object? 
     10 
     11    def main 
     12        pass 
  • Tests/320-misc-two/452-dict-set-lit-indent.cobra

     
     1# indented closing delimiter gave parse error - tkt:283 
     2class LitDictIndent 
     3 
     4    var t = { 'a': 0, 'b':1, 'c':3 
     5        } 
     6    var aa= {1,2,3 
     7        } 
     8     
     9    var obj as Object? 
     10 
     11    def main 
     12        pass