个人技术分享

vs2019 - astyle-extension 扩展插件的编译与使用

概述

查资料时,看到vs2019扩展中有个astyle-extension插件。
以前都是用Astyle.exe配置进VS命令行来用。
既然有插件,那肯定更方便了,想试试。

在vs2019(v16.11.35)的插件市场中找了一下,居然没有。估计是旧版本的旧插件市场中才有。

查资料,astyle-extension 是开源的(https://github.com/lukamicoder/astyle-extension.git)

笔记

编译有警告

工程为AStyleExtension2017.sln
在这里插入图片描述

迁出到本地,能编译过,能用,但是编译有警告,对于重度洁癖患者,心里有点隔应。
尝试解决一下。

VS插件都是C#写的。
开始尝试按照MS官方的插件教程搞一下(教程 - 创建第一个扩展:Hello World).

后来反复琢磨了几次,是不是自己的VS环境有问题?
试了几次,搞定。
我的VS主要是用于C++工程的开发,而且为了避免环境污染,将全局的PATH变量清空了。
有可能缺了C#SDK编程需要的环境变量,重新修正了启动vs2019的bat脚本。

run_vs2019.bat

@echo off
:: run_vs2019.bat
TITLE run_vs2019.bat

set PATH=C:\Windows\system32;C:\Windows;C:\Program Files\Eclipse Foundation\jdk-8.0.302.8-hotspot\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\dotnet\;
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\devenv.exe"

检查C#组件

astyle-extension 用的.net 4.6
在这里插入图片描述

检查了一下,C#确实已经安装了。
但是.net SDK装的不全,将.net SDK全装上。
将插件开发选项勾上
在这里插入图片描述

编译工程

有警告,如下

1>------ 已启动全部重新生成: 项目: AStyleExtension2017, 配置: Debug Any CPU ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277: 发现无法解析的“Microsoft.VisualStudio.GraphModel”的不同版本之间存在冲突。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277: “Microsoft.VisualStudio.GraphModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”与“Microsoft.VisualStudio.GraphModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”之间存在冲突。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:     已选择“Microsoft.VisualStudio.GraphModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”,因为它是主版本而“Microsoft.VisualStudio.GraphModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”不是。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:     依赖于“Microsoft.VisualStudio.GraphModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”[D:\3rd_prj\ms\astyle-extension\astyle-extension\packages\VSSDK.GraphModel.12.0.4\lib\net45\Microsoft.VisualStudio.GraphModel.dll]的引用。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:         D:\3rd_prj\ms\astyle-extension\astyle-extension\packages\VSSDK.GraphModel.12.0.4\lib\net45\Microsoft.VisualStudio.GraphModel.dll
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:           导致引用“D:\3rd_prj\ms\astyle-extension\astyle-extension\packages\VSSDK.GraphModel.12.0.4\lib\net45\Microsoft.VisualStudio.GraphModel.dll”的项目文件项 Include 特性。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:             Microsoft.VisualStudio.GraphModel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:     依赖于“Microsoft.VisualStudio.GraphModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”[C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.GraphModel.dll]的引用。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:         C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VSSDK\VisualStudioIntegration\Common\Assemblies\v4.0\Microsoft.VisualStudio.Shell.Immutable.11.0.dll
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:           导致引用“C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VSSDK\VisualStudioIntegration\Common\Assemblies\v4.0\Microsoft.VisualStudio.Shell.Immutable.11.0.dll”的项目文件项 Include 特性。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:             Microsoft.VisualStudio.Shell.Immutable.11.0, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2203,5): warning MSB3277:             Microsoft.VisualStudio.Shell.12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
1>  AStyleExtension2017 -> D:\3rd_prj\ms\astyle-extension\astyle-extension\AStyleExtension\bin\Debug\AStyleExtension.dll
1>  AStyleExtension2017 -> D:\3rd_prj\ms\astyle-extension\astyle-extension\AStyleExtension\bin\Debug\AStyleExtension.vsix
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

在这里插入图片描述
将引用中的Microsoft.VisualStudio.GraphModel右击删除,重新编译工程,0警告0错误。终于舒坦了:P
在这里插入图片描述

卸载旧版插件

在这里插入图片描述

在这里插入图片描述
将VS2019关掉后,开始自动卸载插件。

安装新版插件

D:\3rd_prj\ms\astyle-extension\astyle-extension\AStyleExtension\bin\Release\AStyleExtension.vsix
在这里插入图片描述
先将VS2019关了,然后双击AStyleExtension.vsix开始安装插件。
在这里插入图片描述
我的计算机上常用的就是VS2019, 只勾上VS2019,点击安装。
在这里插入图片描述
插件安装成功了。

确认astyle-extension插件没有被VS2019禁止

在这里插入图片描述

给astyle-extension插件在VS2019工具栏上加个按钮

默认的astyle-extension是通过菜单来用的,不方便。
如果当前已经打开了代码编辑窗口,就可以在菜单中看到astyle-extension按钮(一个是格式化文档,一个是格式化选择)。
在这里插入图片描述
现在在VS工具栏上加插件的按钮。
想加在生成按钮旁边
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将插件提供的2个按钮都加上。
在这里插入图片描述
现在工具栏原来的生成工具条上,就有了插件的2个按钮。

插件配置

在这里插入图片描述
在这里插入图片描述
用设置功能也可以,不过具体选什么选项,不是很清晰。要自己完全控制格式化参数好一些。

astyle-extension 插件的astyle的版本

看历史记录,可知,当前最新的插件版本为3.1,用的astyle的版本也是3.1
在这里插入图片描述
在这里插入图片描述

astyle具体参数的含义

astyle版本很多,每一版的参数名称都不太一样。
具体到astyle-extension插件,要填的格式化参数,就要按照astyle3.1来。

astyle代码库

https://gitlab.com/saalen/astyle.git
迁出到本地后,切刀3.1的tag
在这里插入图片描述

astyle3.1工程的文档

查看3.1的文档
在这里插入图片描述
格式化参数说明,主要是看astyle.html.
看明白了,就可以向astyle-extension插件配置的Edit中填写参数了。
格式化参数有些作用是相反的,只能选一个。
有的格式化参数是类别相同,但是功能有不同,也只能选一个。
如果用astyle-extension插件配置中的setting窗口,将所有选项都勾上,是不行的.

自己需要啥参数,就从文档中找,只填写自己需要的参数。
有些参数和文档上描述的效果不同(或者没效果), 先不管了(不知道是astyle的bug? 还是参数之间互相影响),按照文档上的来。没效果就没效果。

astyle3.1 参数整理

看了官方文档, 结合自己能接受的代码格式化选项,整理如下:
在这里插入图片描述
Edit编辑框的值如下,每个值之间用回车来分隔。

--mode=c
--style=google
--indent=spaces=4
--attach-namespaces
--attach-classes
--attach-inlines
--attach-extern-c
--attach-closing-while
--indent-classes
--indent-switches
--indent-cases
--indent-namespaces
--indent-after-parens
--indent-continuation=1
--indent-labels
--indent-preproc-block
--indent-preproc-define
--indent-preproc-cond
--indent-col1-comments
--min-conditional-indent=1
--max-continuation-indent=120
--break-blocks
--pad-oper
--pad-comma
--pad-header
--delete-empty-lines
--align-pointer=type
--align-reference=type
--break-one-line-headers
--add-braces
--close-templates
--max-code-length=120

用这些选定的格式化选项,格式化出来的代码美美的:P
官方建议选择一个基础风格(e.g. --mode=c + --style=google), 在基础风格上再去加小风格。

备注

用astyle-extension扩展插件比直接配置Astyle.exe的命令行来的方便。

备注 - 给astyle-extension工程提交了入库请求

头一次向开源库提交补丁,学会了怎么向目标工程提交推拉请求。
如果自己有补丁要给作者,必须先在和开源库同平台上fork一个原版工程。
然后自己修正自己fork出来的工程,
然后在自己工程上创建推拉请求,这样就会转到目标工程的主页。系统会自动将自己的修改作为第一条消息给作者。
然后自己可以补充描述(e.g. 运行环境 vs的版本? 修正前的警告信息),然后补充提交。
剩下的事情就是作者本人的事情了,如果他接受这个推拉请求,就自己合并到主库中。
一般的库,除了作者之外的人是没有写权限的。
对于开源工程的贡献,无论多小的修正,只要是有意义的,就是值得给作者来个推拉请求。
如果自己解决的不到位,那么就留着自己凑合用,不用给作者。
在这里插入图片描述

Astyle的一个bug

采用以上Astyle设置时,如果注释最后面是一个带’'的路径时,格式化之后是错的。
在这里插入代码片
如果要想解决这个小概率问题,需要在注释后面加一个空格
在这里插入图片描述

END