推断开/关parens?

时间:2011-12-13 18:59:17

标签: parsing syntax ide parentheses

似乎有人必须完成如何推断或建议在哪里放置括号的工作。我的意思是,突出匹配的parens是伟大的,但建议会更好。这是一个定义的问题吗?如果是这样,它的名字是什么(比如,Google Scholar应该怎么做?)。如果没有,为什么不呢?这是一个明显不可能/不合适的问题吗?

也就是说,我说我有一些格式错误的红宝石代码:

foo.all.map { |i| i.bar }).uniq.compact.reject { |j| j.match /baz/i }

请注意,我缺少初始括号。我正在谈论的问题是,“当我将光标移到未配对的paren上时,我怎么建议在开头插入一个paren?”

如果这不是一个不好的问题,为什么没有人这样做呢?

1 个答案:

答案 0 :(得分:0)

当用户输入时,可以跟踪“平衡”与“不平衡”的情况。一旦parens变得不平衡,就建议一个paren。

例如,键入(something))会在s之前建议开启。正确地放置“修复它”可能具有挑战性。例如,如果用户键入something(else)),则可以选择:在g之后或在字符串的开头插入fix-it opening paren?

跟踪均衡的情况会相对简单:

int parenCount = 0

event keyUp(char c){
    if(c is close-paren){
        parenCount--;
    }else if(c is open-paren){
        parenCount++;
    }
    if(parenCount < 0){
        // missing an open-paren somewhere
    }
}

// handle missing close-parens when user finished typing the string...
// for example if user types "myObject.something(" and hits enter

可能还需要在a.doSomethingWith((aNumber))

中查找不必要的parens