【问题标题】:How do I make Resharper respect capitals in camelcase code completion?如何让 Resharper 在完成驼峰式代码时尊重大写字母?
【发布时间】:2012-03-22 22:17:33
【问题描述】:

在 VS 2008 上运行的 ReSharper 5.1 中,我正在尝试使用 CamelHumps 使用以下代码完成方法名称:

public bool debugMode { get; private set; }
public DebugWindow()
{
    InitializeComponent();
}

public void logOutput(List<String> logLines)
{
    foreach(string line in logLines)
    {
        <- cursor is here
    }
}

public void logOutput(String logLine)
{
    debugTextBox.Text += "\n" + logLine;
}

在上面提到的光标点,我输入lO,然后按Ctrl+Space。我希望它向我显示logOutput(String) 方法的提示,但它向我显示logLines 的提示,我希望在下拉框中显示下面的提示。如果我改为输入lOu,它会给我突出显示的正确提示(与lou 相同),但我认为我应该能够只输入lO,它应该可以工作。我在 Resharper->Options->Editor 下检查了 CamelHumps。我还将热键设置为 Resharper 默认值,而不是 VS。

我知道过去 IntelliJ 中存在这种行为,但自从使用 ReSharper 以来,这个问题就一直困扰着我。

还有什么我需要在选项中选择/设置的吗?这在 ReSharper 中是否可行?

我尝试搜索其他类似的问题,但我只看到关于全小写完成或驼峰式选择的 cmets/questions。

编辑:请注意,两个 logOutput 方法都出现在完成选项列表中,但当我按 Enter 时,它没有选择它们作为要插入的完成。我将不得不输入额外的字符来强制它选择其中一个。所以问题是,以前在 IntelliJ 中 lO 足以使它选择 logOutput 作为要插入的那个,因为大写 O;这在 ReSharper 中是否可行,如果可以,如何实现?

【问题讨论】:

  • 我在一个测试类中复制了两个 logOutput 方法,并在第二个方法中插入了行 TextBox debugTextBox = new TextBox(); 以避免编译错误。它有效:输入lO 后,两个logOutput 方法都显示在完成列表中。我有 ReSharper 5.1.3000.12 和 VS 2010。
  • 是的,它们也确实出现在我的完成列表中,但是您必须输入其他字符以提示它选择 logOutput() 作为选定选项,或者使用箭头键向下移动到方法。对于 IntelliJ lO,大写的 O 足以告诉它应该将选项减少到小写 l 和大写 O 的可能性。但是,由于它认为logLines 是这种情况下的主要选择,所以它没有注意我输入的 O 的大小写。我将编辑问题以反映它们在选项中。

标签: resharper code-completion camelcasing


【解决方案1】:

我认为您没有得到预期结果的原因是logLines 变量的名称。因为该变量的前 2 个字母是 lo,所以它优先于任何 CamelCase 匹配。所以我想 Resharpers 匹配系统中一定有一些逻辑,它有利于顺序字符而不是 CamelCase 匹配。

例如,如果您将logOutput 的名称更改为storeOutput 之类的名称,然后键入sO,它将向您显示您期望的提示(证明驼峰式匹配有效)。

我从未使用过 IntelliJ,但我认为这可能是相同的逻辑,您只是没有注意到,因为您没有冲突的变量名。

您总是可以在Alt+Space 之后点击向下箭头来调出logOutput(...) 的提示。这将为您提供您想要的结果,并且只需一个额外的按键。

【讨论】:

  • 我确信过去我在 IntelliJ 中的名称存在冲突,并且使用大写字母来优化结果是有效的。我开始觉得这种补全细化在 ReSharper 中根本就不存在,很可惜。确实,我可以通过额外的按键获得我想要的方法,但如果功能存在的话,这就是我试图避免使用大写字母的方法。例如,如果我更改名称,输入 so 全小写会得到相同的结果,使大写 O 无关/无用。
  • @neromir 是的,你可能是对的。就像我说的,我没有使用过 IntelliJ,所以我不能确定。
  • 实际上,更正我上面的评论:大写的O 在重命名为storeOutput 的情况下确实有一些改进。如果我键入所有小写字母,它会向我展示不在课堂范围内的其他内容。然而,似乎变量/方法名称的相关性更接近(例如在我的班级中),大写字母被忽略了。
  • @neromir 这听起来很令人困惑......你能希望的最好的就是学习 Resharper 的怪癖,最好驯服它以提交。公平地说,它的许多其他有用的功能让它值得:)
  • @neromir 还有,您是否尝试过使用 resharpers “转到文件成员”快捷方式 Alt + \ ?那可能对你更好?
【解决方案2】:

在这里等待了几天的其他回复后,我继续在 JetBrains 的 ReSharper 论坛上发布了这个问题,并附上了一个链接返回这里。简短的回答是,这在 ReSharper 5.1 及更高版本中是不可能的。

完整答案见:http://devnet.jetbrains.net/message/5455545

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2018-08-11
    相关资源
    最近更新 更多