Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

48
LINES

< > BotCompany Repo | #1009426 // testBracketHygiene2 - shows where the bad bracket is

JavaX fragment (include) [tags: use-pretranspiled]

Transpiled version (3604L) is out of date.

1  
please include function testBracketHygiene.
2  
3  
static Pair<Int, S> testBracketHygiene2(S s) {
4  
  ret testBracketHygiene2(s, testBracketHygiene_op, testBracketHygiene_close);
5  
}
6  
7  
static Pair<Int, S> testBracketHygiene2(S s, S op, S close) {
8  
  LS tok = javaTok(s);
9  
  new Map<Int> map;
10  
  L<int> stack = getBracketMap2(tok, map, op, close);
11  
  
12  
  for (int i = 1; i < l(tok); i += 2)
13  
    if (isUnproperlyQuoted(tok.get(i))) {
14  
      int lineNr = tokenIndexToUserLandLineNr(tok, i);
15  
      ret pair(tokenToCharIndex(tok, i), "Unclosed string literal at line " + lineNr);
16  
    }
17  
18  
  for (int i : keys(map)) {
19  
    int j = map.get(i);
20  
    S a = tok.get(i), b = tok.get(j);
21  
    int ai = op.indexOf(a), bi = close.indexOf(b);
22  
    if (ai != bi) {
23  
      int lineNr1 = tokenIndexToUserLandLineNr(tok, i);
24  
      int lineNr2 = tokenIndexToUserLandLineNr(tok, j);
25  
      S msg;
26  
      if (empty(a))
27  
        msg = "superfluous closing bracket (" + quote(b) + ") at line " + lineNr2;
28  
      else
29  
        msg = "brackets don't match (" + quote(a) + " vs " + quote(b) + ") at lines " + lineNr1 + " and " + lineNr2;
30  
      ret pair(tokenToCharIndex(tok, /*tossCoin() ?*/ i /*: j*/),
31  
        "Bad hygiene - " + msg);
32  
    }
33  
  }
34  
  
35  
  if (nempty(stack)) {
36  
    int lineNr = tokenIndexToUserLandLineNr(tok, last(stack));
37  
    ret pair(tokenIndexToCharIndex(tok, last(stack)), "Line " + lineNr + ": "
38  
      + "Bad hygiene - " + n(l(stack), "bracket") + " not closed");
39  
  }
40  
41  
  if (map.containsKey(0)) {
42  
    int lineNr = tokenIndexToUserLandLineNr(tok, map.get(0));
43  
    ret pair(tokenToCharIndex(tok, map.get(0)),
44  
      "Bad hygiene - bracket not opened (" + quote(tok.get(map.get(0))) + ") at line " + lineNr);
45  
  }
46  
      
47  
  null;
48  
}

Author comment

Began life as a copy of #1003922

download  show line numbers  debug dex  old transpilations   

Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1009426
Snippet name: testBracketHygiene2 - shows where the bad bracket is
Eternal ID of this version: #1009426/19
Text MD5: e366eba96ef58efaa1e01f2add558498
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2021-08-31 18:12:24
Source code size: 1734 bytes / 48 lines
Pitched / IR pitched: No / No
Views / Downloads: 329 / 436
Version history: 18 change(s)
Referenced in: [show references]