ReSharper格式化:对齐等号操作数

28

对谷歌员工的提示,本问题略有过时,因为所请求的功能现在已经在当前版本的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#工单。 如果有人感兴趣,请投票


1
注意,ReSharper 2017.3.1支持此功能。 - user585968
6个回答

11
目前在ReSharper中没有原生的方法可以实现这一点。幸运的是,ReSharper拥有非常丰富的可扩展API(尽管文档记录较差)。我花了很多时间使用Reflector去研究这些东西。
我们在我工作的公司中使用类成员的类似对齐准则(极端情况下,我们还会对齐方法参数)。我为ReSharper编写了一个插件来帮助我做到这一点。它是一个“代码清理”模块,在代码清理期间(Ctrl-ECtrl-F)执行并对代码进行对齐。如果可能的话,它还会将类设置为sealed
一些例子:
方法参数:
public void DoSomething(string      name,
                        int         age,
                        IEnumerable coll)

(为了使其正常工作,您需要在选项->格式化样式->换行和换行符号中将包装形式参数更改为总是裁剪

常量:

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. 项目属性Debug选项卡中更新Command Line Arguments为正确的输出DLL路径:

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

    这允许通过F5调试插件,它将自动安装在新的Visual Studio实例中的ReSharper插件中。

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

安装后,只需运行Code Cleanup即可修复对齐(不幸的是,我从JetBrains没有收到有关在大括号/分号格式化期间如何执行此操作的答复)。

程序集被重命名以保护无辜者 :)

祝你好运!


非常感谢您分享解决方案!真的非常感激! 顺便说一句,我编译了代码,更改了命令行以指向我的dll,但在按下F5后似乎没有安装。我做错了什么? - Maciej
好的 - 我已经将解决方案复制到C:\驱动器中,现在似乎正在工作 - 现在要进行测试! - Maciej
我刚测试了一下,插件正常工作。谢谢。 不幸的是(就像你提到的那样),它不能对齐方法中的变量。我快速查看了一下你的代码,对于我来说添加这个功能并不容易。需要更多地了解RS的语义。 但是我一定会尝试并且如果成功会与社区分享。 :) - Maciej
1
我很高兴这对你有用。我还没有看过它,但我认为可能存在变量对齐的问题 - 你如何知道要对齐哪些变量?除非你在方法顶部定义所有变量,否则这不会很好地工作。也许可以将其实现为“快速修复” - 高亮显示要对齐的变量,按Alt-Enter,然后就完成了! :) 我稍后会研究一下 :) - Igal Tabachnik
请查看我的更新,找到如何对齐变量的规则。 快速修复选项听起来也很合理! - Maciej
注意:谷歌工程师们,这是目前已过时的信息。ReSharper 2017.3.1支持此功能。 - user585968

11

哇,这似乎是我一直在寻找的。不幸的是,我们公司没有VS2010 :( - Maciej
此扩展程序的源代码也可供使用。请查看VS Gallery链接http://visualstudiogallery.msdn.microsoft.com/en-us/0cc34d69-c6f1-41e3-ac6e-5de071b3edc8 - Omer Raviv
如果可以的话,我会给这个+100分。谢谢你。 - Matt Davis
2
这些链接已经失效,包括关于源代码的评论;您可以在此处找到2017/2019版本:https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.ProductivityPowerPack2017,源代码在此处:https://github.com/Microsoft/VS-PPT。 - Mickael V.

9
您可以尝试这个:Code Alignment。它支持以下对齐方式:
- 按对话框对齐 - 按位置对齐 - 按等号对齐 - 按 m_ 对齐 - 按引号对齐 - 按点号对齐 - 按空格对齐

1
这看起来很好。我唯一发现的缺点是它使用空格对齐,但我更喜欢制表符(TAB)... - Maciej
7
选项卡不适合这种情况,因为如果别人选项卡的宽度不同,文本就无法对齐。选项卡只适合放在行首。 - Andrej Mikulik

3

我知道这很老了。我刚刚发现它。我已经安装了Power Tools,但不知道它有对齐功能。我在设置中找到了它,但没有找到快捷键。这太棒了。 - fizch
版本2017/2019:https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.ProductivityPowerPack2017 - Mickael V.

1
多年以后,但是针对@MickyD的评论,Resharper可以为您完成此操作,请参见Resharper博客。转到Resharper /选项/代码编辑/ C#/选项卡,缩进,对齐。滚动到右侧窗格中的选项底部,找到“在列中对齐相似的代码”,单击即可。

1
据我所知,使用Resharper不幸地无法实现这一点。

1
注意,这是针对谷歌员工的过时信息。ReSharper 2017.3.1支持此功能。 - user585968

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接