标签: code-generation

在Rails 3中为现有数据库方案自动生成脚手架

我有现有的数据库,我想自动生成控制器和视图,包括具有字段大小和非空验证的模型.我查看了一个名为魔术模型生成器的项目,但它看起来很旧,只能根据我的判断创建模型.

我希望这主要是节省时间,我理解大多数控制器和视图对于功能面向用户都没有用.我将挑选出我不需要的内容,并将大部分内容移至管理页面.

有没有这样做的工具?

TIA!

编辑:我想创建实际文件,不想要动态管理员.我将使用控制器并查看站点的一些前面部分.

code-generation ruby-on-rails ruby-on-rails-3

7
推荐指数
2
解决办法
1万
查看次数

从抽象语法树生成基于寄存器的字节码?

从给定的anstract语法树(AST)生成基于寄存器的字节码有哪些众所周知的策略?

考虑这个表达式1 + 2 - 3 * 4 / 5及其AST形式:

bin_exp(-)
    bin_exp(+)
        num_exp(1)
        num_exp(2)
    bin_exp(/)
        bin_exp(*)
            num_exp(3)
            num_exp(4)
        num_exp(5)
Run Code Online (Sandbox Code Playgroud)

我正在努力将AST转换为相应的字节码.到目前为止,我只发现了一篇文章,其中仅简要介绍了它.我对它试图说的内容的解释......

int ridx; // register index

function visit_exp(exp)
{
    switch (exp)
    {
        case bin_exp:
            visit_exp(exp.left);
            visit_exp(exp.right);

            printf("add %i, %i -> %i\n", ridx - 2, ridx - 1, ridx);

            // save ridx, as it contains the result
                    break;
        case num_exp:
            printf("mov %i -> %i\n", ridx, exp.value);
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

请帮帮我,谢谢.

compiler-construction code-generation bytecode abstract-syntax-tree

7
推荐指数
1
解决办法
1084
查看次数

Rails Generator传递一组参数

我已经看过关于如何创建自己的生成器的rails演员,并且已经阅读了许多堆栈溢出问题.基本上我要做的是构建一个像内置的rails迁移生成器一样的生成器,它接受类似的参数attribute:type然后根据需要插入它们.这是我现在为我的发电机编写的代码.

class FormGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)
  argument :model_name, :type => :string
  argument :attributes, type: :array, default: [], banner: "attribute:input_type attribute:input_type"
  argument :input_types, type: :array, default: [], banner: "attribute:input_type attribute:input_type"



  def create_form_file
    create_file "app/views/#{model_name.pluralize}/_form.html.erb", "


<%= simple_form_for @#{model_name.pluralize} do | f | %>
<%= f.#{input_type}  :#{attribute}, label: '#{attribute}' %>
<% end %>
"
  end
end
Run Code Online (Sandbox Code Playgroud)

基本上我想要它做的是生成一个视图文件,其中包含与参数一样多的行.因此传递rails g form products name:input amount:input other_attribute:check_box会生成一个_form.html.erb包含以下内容的文件:

<%= simple_form_for @products do | f | %>
    <%= f.input  :name, …
Run Code Online (Sandbox Code Playgroud)

ruby code-generation ruby-on-rails simple-form

7
推荐指数
1
解决办法
707
查看次数

使用Roslyn确定唯一标识符名称

使用Roslyn,我基于从我的控件之外的代码解析的方法符号生成C#代码.因此,该方法可以具有任意数量的参数.我生成的代码包含一个lambda表达式,它接受一个参数,例如:

// I'm generating code like this
public void SomeMethod()
{
    DoSomething(x => x.Foo());
}
Run Code Online (Sandbox Code Playgroud)

此代码的潜在问题是如果包含方法包含一个名为的参数x:

// my code generator might produce this
public void SomeMethod(int x)
{
    DoSomething(x => x.Foo());
}
Run Code Online (Sandbox Code Playgroud)

此代码导致错误:

无法在此范围内声明名为"x"的本地或参数,因为该名称用于封闭的本地范围以定义本地或参数

很公平.

为了解决这个问题,我想我可以从标识符名称开始x,用SemanticModel.LookupSymbols它来查看它是否已经定义.如果是这样,前置_(获取_x)并重复.

但这是最好的方法吗?如果是这样,LookupSymbols当我拥有的是方法符号时,如何使用?

我想到的另一个选择是Parameters在方法符号中使用该集合.我可以对它们执行相同的名称选择算法.但这样就够了吗?例如:

private static string GetIdentifierName(IMethodSymbol within)
{
    var proposed = "x";

    while (within.Parameters.Any(x => x.Name == proposed))
    {
        proposed = "_" + proposed;
    }

    return proposed;
}
Run Code Online (Sandbox Code Playgroud)

.net c# code-generation roslyn

7
推荐指数
1
解决办法
521
查看次数

CMake 通配生成的文件

我使用它是asn1c为了从一个或多个.asn1文件生成一系列文件.h并将.c其放入给定的文件夹中。

这些C 文件的名称与原始文件没有对应关系asn1。

这些文件必须与我的文件链接在一起才能获得有效的可执行文件。我希望能够:

  • 自动在构建目录中生成文件,以避免污染项目的其余部分(可能用 完成add_custom_target)
  • 指定我的可执行文件对这些文件的依赖关系,以便asn1c在文件丢失或其中一个.asn1文件已更新时自动运行可执行文件。
  • 自动将所有生成的文件添加到我的可执行文件的编译中。

由于预先不知道生成的文件,因此可以仅全局显示命令输出目录的内容asn1c- 只要该目录不为空,我就很高兴。

dependencies code-generation glob cmake

7
推荐指数
1
解决办法
3716
查看次数

如何将自定义 AST 转换为 JS 代码

我目前正在根据我设计的新语言规范生成自定义 AST。这个自定义 AST 包含我设计的不同节点,其中包含我现在生成 JavaScript 代码所需的所有信息。例如:

假设我有一个 customExpressionNode,我希望将其转换为包含几个 if 条件的 JavaScript 函数。

我目前正在研究像 Babylon 和 Esprima 这样的库,用于从我的自定义 AST 生成新的 Javascript AST,但据我所知,这些库使用的 AST 非常复杂。我还想避免将 js 代码打印到几个文件中然后解析和编译它们,所以我的问题是:

有没有更好的方式以编程方式生成符合 JavaScript 的 AST,我可以用它来生成 JavaScript 代码?

javascript code-generation abstract-syntax-tree esprima babel-babylon

7
推荐指数
1
解决办法
2837
查看次数

在 Swagger 中生成代码时如何使用 useBeanValidation 选项?

Swagger 为 Spring 服务器生成的代码有一个名为 useBeanValidation 的选项,但我不知道如何使用它。我找不到任何文档告诉我它支持哪些验证,所以我决定自己尝试一下。OpenAPI 规范对架构对象属性的描述列出了这些属性:

title
multipleOf
maximum
exclusiveMaximum
minimum
exclusiveMinimum
maxLength
minLength
pattern
maxItems
minItems
uniqueItems
maxProperties
minProperties
required
enum
Run Code Online (Sandbox Code Playgroud)

所以我尝试将其中一些属性添加到我创建的对象的字段中。这是我的 .yaml 文件的相关部分:

components:
  schemas:
    Dummy:
      type: object
      properties:
        iMinMax:
          type: integer
          format: int32
          minimum: 0
          maximum: 100
        dMinMaxEx:
          type: number
          format: int32
          minimum: 5.0
          maximum: 10.0
          exclusiveMinimum: false
          exclusiveMaximum: true
        dMinExMaxEx:
          type: number
          format: int32
          minimum: 5.0
          maximum: 10.0
          exclusiveMinimum: true
          exclusiveMaximum: true
        dMinExMax:
          type: number
          format: int32
          minimum: 5.0
          maximum: 10.0
          exclusiveMinimum: true
          exclusiveMaximum: false …
Run Code Online (Sandbox Code Playgroud)

code-generation bean-validation swagger

7
推荐指数
1
解决办法
6484
查看次数

PyCharm - 为所有构造函数参数生成字段

我用构造函数定义了一个类:

class Example:
    def __init__(self, a, b, c):
        ...
Run Code Online (Sandbox Code Playgroud)

现在我想为每个构造函数参数声明一个字段,如下所示:

class Example:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
Run Code Online (Sandbox Code Playgroud)

我想自动执行此操作。PyCharm 的检查允许我为参数生成字段,但一次只能生成一个(作为 的修复Parameter x is not used),这很烦人。对于所有参数,我如何同时执行此操作?

我发现最接近的是python 类 __init__ function 的 PyCharm 模板,解决方案不灵活,因为它只支持固定数量的参数。而且,我觉得这是成熟的IDE必须实现的功能,Idea允许这样做。

那篇文章还参考了在 Python 中进行自动属性分配的最佳方法是什么,这是个好主意吗?,其中讨论了autoassign,这似乎有很多缺点。

我的 PyCharm 版本是 2019.1.3 CE。

python code-generation pycharm

7
推荐指数
1
解决办法
801
查看次数

保留 $?

仅使用 POSIX shell 的功能,是否有一个“简单命令”,它什么都不做并且不会改变$? 人们通常描述:为 shell 的无操作命令的值,但这总是设置$?为零,所以这不是我想要的想。

这是生成 shell 脚本的程序所需要的。在几个地方它需要发出一个 if-then-else 块

if CONDITION
then
    TRUE-COMMANDS
else
    FALSE-COMMANDS
fi
Run Code Online (Sandbox Code Playgroud)

但是,因为进一步的并发症的,我宁可不尝试,现在来解释,它不能可靠地告诉是否TRUE-COMMANDS和FALSE-COMMANDS是空的。空的 then 或 else 子句将是 shell 语法错误。

:可以放在then-clause的开头以处理为TRUE-COMMANDS空,但这不会起作用,FALSE-COMMANDS因为它会破坏$?并且FALSE-COMMANDS可能想要查看$?条件设置的值。出于同样的原因,:不能放在后面 FALSE-COMMANDS——if-then-else后面的代码可能希望$?从 if-then-else 中的最后一个操作中看到。

可以避免的奖励积分:

  • 分叉:(exit $?)完成这项工作,但在生成的脚本中有太多这样的条件块,它会产生可测量的减速。

  • 功能:给定nop () { return $? }然后nop完成工作,但由于我不想涉及的更多复杂性,nop为所有需要它的地方足够早地定义是不切实际的。

posix code-generation sh

7
推荐指数
1
解决办法
235
查看次数

C# 源生成器 - 警告 CS8032:无法创建分析器的实例

我正在尝试构建一个源代码生成器。现在,只是返回“Hello World”的最基本的静态方法。

生成器项目构建,但生成的代码不可用,调试器从不启动,构建输出显示

CSC:警告 CS8032:无法从 ...\bin\Debug\net5.0\Generator.StaticPropertyEnum.dll 创建分析器 Generator.StaticPropertyEnum.helloWorld 的实例:无法加载文件或程序集“System.Runtime, Version=5.0” .0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。该系统找不到指定的文件..

我参考的例子

我试过了

  • 更改生成器和测试项目的 TargetFramework 和 LanguageVersion
  • 引用许多版本的分析器库Microsoft.CodeAnalysis.CSharp和Microsoft.CodeAnalysis.Analyzers
  • 引用显式版本 Microsoft.Net.Compilers.Toolset
  • 添加对 NetStandard 库的显式引用
  • 使用分析器项目模板从头开始
  • 寻找生成器项目模板(但没有找到)

版本

Visual Studio:版本 16.8.3
.NET SDK:5.0.101

代码

生成器.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.9.0-2.final" PrivateAssets="all" />
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.0.0" PrivateAssets="all" />
  </ItemGroup>
 
</Project>
Run Code Online (Sandbox Code Playgroud)

测试 csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" /> …
Run Code Online (Sandbox Code Playgroud)

.net c# code-generation c#-9.0

7
推荐指数
4
解决办法
3269
查看次数