问题标签 [sourcegenerators]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
27 浏览

c# - 是否可以从 CSharpCompilation.ExternalReferences 指定的程序集中访问类型?

我正在尝试编写一个源生成器来删除项目中的样板代码。该项目的目的是从“解决方案”代码的现有单元测试中为“练习”代码生成新的单元测试。我将在下面给出一个简短的示例:

为了生成这个附加方法,我想验证Exercises.Person 类是否具有可读字段或属性名称。我以前通过反思做到了这一点,并希望继续这样做。

所以我的问题是:是否可以在 CSharpCompilation.ExternalReferences 指定的程序集中类型的源生成期间访问类型信息,如 MemberInfo?

0 投票
1 回答
100 浏览

c# - 如何在源生成器中查找类声明的文件路径

标题几乎解释了它。我正在编写一个源生成器,并且想知道如何找到给定ClassDeclarationSyntax节点的文件路径。这是我希望如何使用它的示例。

0 投票
2 回答
77 浏览

c# - C# TypeKind 的字符串?是 TypeKind.Class

改写的问题: 我有这个具有泛型类型的相等比较器限制为class

当一个班级让我们说

由代码生成器使用

NetAnalyzer 说string?有一个 TypeKind 类

但是当我这样做时,

它说不string?符合“类”约束。即使分析器告诉我它是一个类,我是否在这里遗漏了什么?还是我误解了这个概念?

原始问题:根据微软文档中对Nullable的描述,它们被归类为structs,但为什么 CodeAnalyzer 告诉我 TypeKind 的 TypeKindstring?是 TypeKind.Class?

这是一些上下文,在我正在编写的库中,针对源生成(C# 9 源生成器)分析类,这基本上是使用 .NetAnalyzer。将检查类的每个属性是否将它们的类型视为类。事实证明,它string?被视为一个类。

0 投票
0 回答
121 浏览

c# - C# Microsoft.CodeAnalysis 中的 System.IntPtr 和 nint

在类型的正常比较中 typeof(nint)==typeof(System.IntPtr)是真的

所以我期待SpecialTypeofSystem.IntPtr就像andnint一样,在使用 进行 CodeAnalysis 时。System.Int32intMicrosoft.CodeAnalysis

但事实证明 System.IntPtr 的 SpecialType 仍然是 System.IntPtr。

这是我的代码

所以我的问题是为什么特殊类型System.IntPtr不在nintCodeAnalysis 中?

PS。我已经浏览了这个文档。我知道“..关键字不仅仅是类型的别名。” 但为什么这是真的typeof(nint)==typeof(System.IntPtr)呢?

0 投票
0 回答
109 浏览

flutter - 如何通过扩展过滤 build_runner 输入?

我正在尝试使用 Dart 的https://github.com/dart-lang/source_gen制作我的自定义构建器。

中的 buildExtensionsbuilder.dart.dart

它适用于任何 dart 文件

buildExtensions = { '.dart': [generatedExtension]..addAll(additionalOutputExtensions) },

在此处输入图像描述

因此,即使在 build.yaml 中,我也将构建输入设置为.source.dart

它忽略".source.dart"并仍然在任何 dart 文件上运行。

0 投票
0 回答
23 浏览

c# - runtume 源生成类型的 C# 和 TypeScript 之间的二进制编码对象传输

标题肯定很混乱,但让我给你我的用例。

在我们的项目中,我们使用 ECS 作为我们应用程序的一部分,但这并不是那么重要。重要的是组件(纯数据类)在应用程序运行时构建,然后动态加载它们的程序集。此外,可以以相同的方式生成 Typescript 数据类。

我想要的是在 C# 服务器和 TypeScript 客户端中都有一个数据类的注册表,只要生成新组件就会同步。然后我想用消息交流

客户端和服务器是否可以反序列化和解码二进制数据?

0 投票
2 回答
88 浏览

flutter - 如何正确导入自定义源生成包

我正在尝试使用我自己编写的源代码生成包,称为animated_widget_generator. 调用 annotations 包,并调用animated_widget_annotations我尝试使用它的应用程序example_usage

我将必要的包添加到我的dev_dependencies. 这是我的pubspec.yaml

但是当我尝试在手机上运行该应用程序时,它给了我以下错误:

Stack Overflow 上还有其他关于这个错误的问题,但它们总是关于一些第三方包,而不是关于自定义源生成包,而且这些问题的任何答案似乎都与我无关

编辑:pubspec.yaml对于animated_widget_generatoranimated_widget_annotations

0 投票
1 回答
233 浏览

code-generation - Roslyn 的 SyntaxReceiver - 获取类实现接口

我正在尝试开发一个源生成器来使用该接口在部分类上自动实现一个接口。

我相信这必须是Microsoft 新的 Source Generators的常见用例,甚至在Roslyn Source Generator Cookbook中列为用例,但没有示例实现。

我已经搜索过,但很难在 Roslyn Analyzers 中找到针对此场景的问题。

在说明书中,他们使用 SyntaxReceiver 类来过滤Execute调用应该处理哪些语法节点:

查看说明书以了解生成器的实现细节。

我要确定的是如何HasInterface在 ClassDeclarationSyntax 节点上实现我的扩展。

我如何能:

  1. 从 ClassDeclarationSyntax 中获取 BaseList 属性,
  2. 确定类是否是部分的
  3. 访问接口
  4. 确定是否有任何接口属于特定类型。
0 投票
0 回答
83 浏览

c# - 如何使用 Source Generator 获取数据成员默认值?

关于名为Source Generator的 C# 9 新特性,如何获取属性默认值?

例如:

如何1在编译时获得定义?

0 投票
1 回答
718 浏览

c# - 基于其他程序集类生成源码(c#源码生成器)

我想生成一个静态类,该类应该有一个方法,具体取决于特定参考程序集中的其他类。

一个简化的例子:

我想在项目中找到Entity类并在Core项目中生成一个类Persistence,问题是我的Core项目无法访问并且之前已经编译过Persistence。我应该使用反射还是手动读取核心实体?还是有更好的方法来访问项目中的 SyntaxTree Core