【问题标题】:ReSharper formatting: align equal operandsReSharper 格式化:对齐相等的操作数
【发布时间】:2010-11-20 04:25:18
【问题描述】:

Google 员工注意,这个问题有点过时了,因为当前版本的 ReSharper 2017.3.1 现在支持请求的功能

我喜欢格式化我的代码以对齐相等操作数的右侧。
喜欢这里:

bool    canRead     = false;
bool    canReadClass    = true;
string  className   = boType.Name;

我最近切换到 ReSharper,发现它非常有用,但找不到允许我以所述方式格式化代码的选项。

你知道是否有这样的选项/插件吗?
也许你知道除了 ReSharp 解决方案之外允许这样做吗?

编辑:
如何决定代码的哪一部分应该对齐?
我的约定是在同一个块中对齐所有变量。
“块”是指不被空行分隔的部分代码。

例如

// First block
int      count     = 10;
string   name      = "abc";
bool     calculate = true;
.....
.....
// Second block
MyOwnType    myType   = new MyOwntype();
int          count    = 10;

编辑 -2
我为此打开了R# ticket。如果有人感兴趣please vote!

【问题讨论】:

  • Google 员工请注意,ReSharper 2017.3.1 支持此功能

标签: c# resharper code-formatting


【解决方案1】:

我认为值得注意的是Visual Studio Productivity Power Tools 具有对齐分配功能。 这是Visual Studio 2013 Productivity Power Tools的链接。

【讨论】:

【解决方案2】:

(目前)没有办法在 ReSharper 中开箱即用地执行此操作。幸运的是,ReSharper 具有非常丰富的可扩展性 API(尽管文档很少)。我花了很多时间在 Reflector 上尝试解决问题。

在我工作的公司中,我们对班级成员使用类似的对齐准则(极端情况下,我们还对齐方法参数)。我为 ReSharper 编写了一个插件来帮助我做到这一点。它是一个“代码清理”模块,在代码清理期间的某个时间运行(Ctrl-ECtrl-F) 并为您对齐代码。如果可能的话,它还会生成 sealed 类。

一些例子

方法参数:

public void DoSomething(string      name,
                        int         age,
                        IEnumerable coll)

(为此,您需要在 Options->Formatting Style->Line Breaks and Wrapping 中将 Wrap 形式参数 更改为 Chop always正常工作)

常量:

private const int    RESOURCEDISPLAYTYPE_DOMAIN = 0x00000001;
private const int    CONNECT_COMMANDLINE        = 0x00000800;
private const int    CONNECT_INTERACTIVE        = 0x00000008;
private const string RESOURCE_NAME              = "Unknown";


您可以从我的 SkyDrive 下载源代码。
编辑我似乎无法访问该 SkyDrive,并且文件也丢失了。这是在 github 之前 :(

请注意,您需要几个东西来编译/调试它:

  1. 更新Command Line ArgumentsProject Properties 中的Debug 选项卡中,正确路径为 输出 DLL:

    /ReSharper.Plugin "X:\<projects>\MyCompany.CodeFormatter\MyCompany.CodeFormatter\bin\Debug\MyCompany.CodeFormatter.dll"

    这允许通过以下方式调试插件 F5,它会是 自动安装在 ReSharper 的插件在新 Visual Studio 实例将 打开。

  2. 该插件适用于 ReSharper 4.5,它引用了此版本的 DLL。如果您将 ReSharper 安装在 C:\Program Files\JetBrains\ReSharper 以外的任何其他位置,则必须修复引用。
  3. 这不会对齐方法内的变量,但添加起来应该不难:)

安装后,只需运行 Code Cleanup 即可修复对齐问题(很遗憾,我从未收到 JetBrains 关于如何在大括号/分号格式化期间执行此操作的回复)。

为了保护无辜者,大会更名了 :)

祝你好运!

【讨论】:

  • 非常感谢您分享您的解决方案!真的非常感谢!顺便说一句,我编译了代码,更改了 cmd 行以指向我的 dll,但在 F5 之后似乎没有安装。我做错了什么?
  • 好的 - 我已将解决方案复制到 C:\ 驱动器,现在似乎可以工作了 - 现在要测试它!
  • 我刚刚测试过,插件按预期工作。谢谢。不幸的是(正如你提到的)它没有对齐方法内的变量。快速查看了您的代码,我添加它并不容易。需要进一步了解 RS 的语义。但如果我这样做了,我肯定会尝试分享社区。 :)
  • 我很高兴这对你有用。我还没有看过它,但我认为对齐变量可能存在问题 - 你怎么知道要对齐哪些?除非您在方法的顶部定义所有变量,否则这不会很好地工作。也许这可以作为“快速修复”来实现 - 突出显示要对齐的变量,按 Alt-Enter 并瞧! :) 稍后我会调查的 :)
  • 查看我的更新以找到如何对齐变量的规则。快速修复选项听起来也很合理!
【解决方案3】:

你可以试试这个:Code Alignment

支持

  • 按...对齐(对话框)
  • 按位置对齐...(对话框)
  • 按等号对齐
  • 按 m_ 对齐
  • 按“对齐”
  • 按 .
  • 对齐
  • 按空格对齐

【讨论】:

  • 这看起来不错。我发现的唯一缺点是它使用空格来对齐,但我更喜欢 TAB...
  • tabs 不适合这个,因为如果其他人有不同宽度的 tabs,它不会对齐。制表符仅在行首有效。
【解决方案4】:

Productivity Power Tools 2012 也有一个命令:ctrl-alt-]

显然还有其他好东西。

【讨论】:

  • 我知道这是旧的。我刚遇到这个。我已经安装了电动工具,但不知道它有对齐的东西。我在设置里找到了,但不是快捷键。这就是伟大。
【解决方案5】:

据我所知,很遗憾,使用 Resharper 无法做到这一点。

【讨论】:

  • Google 员工请注意,此信息目前已过时。 ReSharper 2017.3.1 支持此功能
【解决方案6】:

晚了好几年,但除了@MickyD 的评论,Resharper 可以为你做这件事,见Resharper blog。转到 Resharper/选项/代码编辑/C#/制表符、缩进、对齐。滚动到右侧窗格中选项的底部,找到“在列中对齐相似代码”,单击事物,享受。

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2016-12-08
    相关资源
    最近更新 更多