命令行工具或 dotnet 工具在编译时删除未使用的使用
Command line tool or dotnet tool to remove unused using in compile time
有什么方法可以在编译时删除未使用的 using 语句吗?它可以是任何 cli 工具或 dotnet 工具。
原因如下:
我们有代码生成器,这个代码生成器生成了很多using
,但在某些情况下需要使用,而有些则不需要。但是在生成时没有办法决定在以后的代码中使用哪些 using 哪些不使用。
因此,如果我们有工具可以删除未使用的 using 语句,那就太好了。编辑器命令当然不起作用,因为当我们重建项目时,生成的文件将重新生成。因此,mechasnim 在编译时必须是 运行,在生成器完成之后。
我检查了 dotnet-format
工具,但是没有这个选项。
编辑 1:
imput文件有一个简单的sample,就是generator的输入。
import valuedto.dml
import valuemodel.dml
service: SampleService
{
controller: ValueController
{
public:
{
PublicValueDTO GetValue( string id );
}
public:
{
PrivateValueModel GetValuePrivate( string id );
}
}
}
如您所见,服务文件导入了两个不同的模型文件。一个 dml 文件包含 public dto-s,另一个包含私有模型。
生成器以此为输入,生成大量代码:
- 客户端界面
- http客户端实现
- 控制器实现
- 客户端 dll
- 等...
生成器之一是 只需收集 public 函数,并为第 3 方客户端创建程序集,以使用 public 接口.但在这种情况下很难决定必须使用哪些进口。在现实世界中,有 mor import,import is imported are other import recursively.
如果public接口包含来自私有模型的using
-s,生成的代码不可编译
请将主要问题集中在您的回答中,而不是实际的实现中。因为它只是一个非常非常小的样本,而不是真实的样本(缺少版本、权限、路由、动词、多部分等...)
由于下面的原因 #1,删除“编译期间”是没有意义的。我怀疑你的意思是“手动 IDE/not 之外”。
但是,你为什么要关心?
- Using directives 没有 IL 工件,不会影响代码大小等
- 如果代码生成器由于额外使用而生成不明确的代码,无论如何都不可能删除“未使用”,并且生成代码无效,生成器需要修复。
- 通常,生成的代码应该被视为不可变和不透明的(并且不要查看它,除了调试)。不要太在意它的美
最后一点可以说是可以讨论的。就个人而言,我确实喜欢格式良好且简洁的生成代码,如果仅仅是为了推理它或在单步模式下调试它的话。但这将是生成器的工作。
话虽如此,有可用的 ReSharper 命令行工具可以在构建期间执行此操作(当心“寻找工具”的问题关闭 ;-))
再想一想:
But at generation time there is no way to decide which using is used
and which is not used in later code.
我会挑战这一点。生成器稍后应该知道它 generates/uses 的确切类型。毕竟,您通常首先在内存中生成 AST 或类似的东西,然后将其写入文件。如果不是,发电机的设计可能...太简单了?例如。首先脱口而出一堆可能是东西的使用指令,然后是实际代码?如果您可以选择改进实际的生成器——无论如何这将是处理此类事情的正确位置——您应该就此提出一个具体问题并解释,为什么在您的情况下您认为它在生成实际文件之前无法知道事情。
你可以按 Ctrl+R , Ctrl+G
(visual studio) 从工作文件中删除未使用的命名空间并对其进行排序。
我也一直在为此寻找工具。这应该是一个特殊的工具,不应该是编译阶段的一部分。
免费的 jetbrains cli 工具可以进行代码清理。删除未使用的 using 指令是它可以做的事情之一。
有什么方法可以在编译时删除未使用的 using 语句吗?它可以是任何 cli 工具或 dotnet 工具。
原因如下:
我们有代码生成器,这个代码生成器生成了很多using
,但在某些情况下需要使用,而有些则不需要。但是在生成时没有办法决定在以后的代码中使用哪些 using 哪些不使用。
因此,如果我们有工具可以删除未使用的 using 语句,那就太好了。编辑器命令当然不起作用,因为当我们重建项目时,生成的文件将重新生成。因此,mechasnim 在编译时必须是 运行,在生成器完成之后。
我检查了 dotnet-format
工具,但是没有这个选项。
编辑 1: imput文件有一个简单的sample,就是generator的输入。
import valuedto.dml
import valuemodel.dml
service: SampleService
{
controller: ValueController
{
public:
{
PublicValueDTO GetValue( string id );
}
public:
{
PrivateValueModel GetValuePrivate( string id );
}
}
}
如您所见,服务文件导入了两个不同的模型文件。一个 dml 文件包含 public dto-s,另一个包含私有模型。
生成器以此为输入,生成大量代码:
- 客户端界面
- http客户端实现
- 控制器实现
- 客户端 dll
- 等...
生成器之一是 只需收集 public 函数,并为第 3 方客户端创建程序集,以使用 public 接口.但在这种情况下很难决定必须使用哪些进口。在现实世界中,有 mor import,import is imported are other import recursively.
如果public接口包含来自私有模型的using
-s,生成的代码不可编译
请将主要问题集中在您的回答中,而不是实际的实现中。因为它只是一个非常非常小的样本,而不是真实的样本(缺少版本、权限、路由、动词、多部分等...)
由于下面的原因 #1,删除“编译期间”是没有意义的。我怀疑你的意思是“手动 IDE/not 之外”。
但是,你为什么要关心?
- Using directives 没有 IL 工件,不会影响代码大小等
- 如果代码生成器由于额外使用而生成不明确的代码,无论如何都不可能删除“未使用”,并且生成代码无效,生成器需要修复。
- 通常,生成的代码应该被视为不可变和不透明的(并且不要查看它,除了调试)。不要太在意它的美
最后一点可以说是可以讨论的。就个人而言,我确实喜欢格式良好且简洁的生成代码,如果仅仅是为了推理它或在单步模式下调试它的话。但这将是生成器的工作。
话虽如此,有可用的 ReSharper 命令行工具可以在构建期间执行此操作(当心“寻找工具”的问题关闭 ;-))
再想一想:
But at generation time there is no way to decide which using is used and which is not used in later code.
我会挑战这一点。生成器稍后应该知道它 generates/uses 的确切类型。毕竟,您通常首先在内存中生成 AST 或类似的东西,然后将其写入文件。如果不是,发电机的设计可能...太简单了?例如。首先脱口而出一堆可能是东西的使用指令,然后是实际代码?如果您可以选择改进实际的生成器——无论如何这将是处理此类事情的正确位置——您应该就此提出一个具体问题并解释,为什么在您的情况下您认为它在生成实际文件之前无法知道事情。
你可以按 Ctrl+R , Ctrl+G (visual studio) 从工作文件中删除未使用的命名空间并对其进行排序。
我也一直在为此寻找工具。这应该是一个特殊的工具,不应该是编译阶段的一部分。
免费的 jetbrains cli 工具可以进行代码清理。删除未使用的 using 指令是它可以做的事情之一。