标签: codegen

Moshi 的 Kotlin 代码生成器有什么用?

我最近开始在我的 Android 应用程序中使用 Moshi,我很想知道更多关于注释的@JsonClass(generateAdapter = true) 真正作用。

示例数据类:

data class Person(
    val name: String
)
Run Code Online (Sandbox Code Playgroud)

我可以按如下方式序列化/反序列化这个类:

val moshi: Moshi = Moshi.Builder().build()
moshi.adapter(Person::class.java).toJson(Person())
Run Code Online (Sandbox Code Playgroud)

我在这里没有使用 @JsonClass 注释,因此不会启动代码生成。

我的问题是,为什么以及何时需要使用 @JsonClass(generateAdapter = true)

serialization json codegen kotlin moshi

13
推荐指数
2
解决办法
8753
查看次数

无法找到以下指针的任何 GraphQL 类型定义:src/**/*.graphql

我正在使用该@graphql-codegen/cli工具从我的 graphql 服务器中生成打字稿类型。这是我的codegen.yml内容:

overwrite: true
schema: "http://localhost:3001/graphql"
documents: "src/**/*.graphql"
generates:
  src/generated/graphql.tsx:
    plugins:
      - "typescript"
      - "typescript-operations"
      - "typescript-react-apollo"
  ./graphql.schema.json:
    plugins:
      - "introspection"
Run Code Online (Sandbox Code Playgroud)

这是package.json我用来生成类型 ( yarn schema)的脚本:

"schema": "graphql-codegen --config codegen.yml"
Run Code Online (Sandbox Code Playgroud)

所有这些都是通过执行 cli 向导自动生成的yarn codegen init

但是当我运行时yarn schema,这些是我得到的错误:

在此处输入图片说明

(服务器正在运行http://localhost:3001/graphql并公开图形模式。

感谢您的帮助和建议

这是托管在我的服务器中的 .graphql 文件(http://localhost:3001/graphql

# -----------------------------------------------
# !!! THIS FILE WAS GENERATED BY TYPE-GRAPHQL !!!
# !!!   DO NOT MODIFY THIS FILE BY YOURSELF   !!!
# -----------------------------------------------

"""Date …
Run Code Online (Sandbox Code Playgroud)

codegen typescript graphql graphql-codegen

12
推荐指数
1
解决办法
7269
查看次数

如何从简单函数中提取名称?

我有这段代码:

import inspect
import ast

def func(foo):
    return foo.bar - foo.baz

s = inspect.getsource(func)
xx = ast.parse(s)

class VisitCalls(ast.NodeVisitor):
    def visit_Name(self, what):
        if what.id == 'foo':
            print ast.dump(what.ctx)

VisitCalls().visit(xx)
Run Code Online (Sandbox Code Playgroud)

从函数'func'我想提取:

['foo.bar', 'foo.baz']
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

(('foo', 'bar'), ('foo', 'baz))
Run Code Online (Sandbox Code Playgroud)

编辑

一些背景解释为什么我认为我需要这样做

我想将一个普通的python函数的代码转换为电子表格公式.

所以我需要转换:

foo.bar - foo.baz
Run Code Online (Sandbox Code Playgroud)

至:

=A1-B1
Run Code Online (Sandbox Code Playgroud)

示例电子表格http://img441.imageshack.us/img441/1451/84516405.png

**再次编辑*

到目前为止我得到了什么.

以下程序输出:

('A1', 5)
('B1', 3)
('C1', '= A1 - B1')
Run Code Online (Sandbox Code Playgroud)

代码:

import ast, inspect
import codegen # by Armin Ronacher
from collections import OrderedDict

class SpreadSheetFormulaTransformer(ast.NodeTransformer):
    def __init__(self, sym):
        self.sym = …
Run Code Online (Sandbox Code Playgroud)

python abstract-syntax-tree codegen

10
推荐指数
1
解决办法
1474
查看次数

swagger codegen在生成的文件中覆盖我的自定义代码

我使用swagger codegen生成jaxrs服务器端类以及客户端java类.

这是我用来生成类的命令__CODE__

java -jar modules/swagger-codegen-distribution/target/swagger-codegen-distribution-2.1.2-M1.jar   -i /Users/me/Workspace/swagger-codegen/samples/yaml/echo.yaml   -l jaxrs   -o samples/server/echo/java
Run Code Online (Sandbox Code Playgroud)

生成的服务器代码有一个占位符来写我的"魔法".

public Response echo(@ApiParam(value = ""  )@HeaderParam("headerParam") String headerParam,
    @ApiParam(value = "",required=true) @QueryParam("message") String message)
      throws NotFoundException {
      // do some magic!
      return Response.ok().entity(new ApiResponseMessage(ApiResponseMessage.OK, "magic!")).build();
  }
Run Code Online (Sandbox Code Playgroud)

我在"echo"方法中添加了"magic"并重新生成了代码,只是为了看到它消失了.避免丢失自定义代码的一种方法是修改codegen模板以生成接口而不是类.然后我可以在实现的类中拥有所有自定义代码.

我试图找出是否有一种方法可以保留自定义"魔法",即使在重新生成代码之后,或者有更好的方法来处理这种情况,而不是更改模板以生成接口而不是类.

codegen swagger

10
推荐指数
1
解决办法
4471
查看次数

FreeBSD Echoprint codegen

我试图在FreeBSD上编译Echoprint codegen,但是失败了.但这里是我所得到的,当我尝试运行makemake install


> make
"Makefile", line 35: Missing dependency operator
"Makefile", line 39: Need an operator
"Makefile", line 41: Need an operator
"Makefile", line 50: warning: duplicate script for target "%.o" ignored
"Makefile", line 53: warning: duplicate script for target "%.o" ignored
"Makefile", line 56: warning: duplicate script for target "%.o" ignored
"Makefile", line 61: Missing dependency operator
"Makefile", line 62: warning: duplicate script for target "ifeq" ignored
"Makefile", line 62: warning: duplicate script for target "(,Darwin)" …

freebsd audio-fingerprinting codegen echoprint

9
推荐指数
1
解决办法
1114
查看次数

使用SymPy codegen为方程组生成Fortran子例程

基于我在这里找到的前一个例子,我试图找出如何生成一个Fortran代码,该代码对应于我需要坚持的特定形式.所需的FORTRAN代码将如下所示(它基于FitzHugh-Nagumo模型):

  SUBROUTINE FF(NE,U,PAR,F) 
!     ---------- -- 
!     Define the nonlinear term

  IMPLICIT NONE
  INTEGER, INTENT(IN) :: NE
  DOUBLE PRECISION, INTENT(IN) :: U(NE),PAR(*)
  DOUBLE PRECISION, INTENT(OUT) :: F(NE)

  DOUBLE PRECISION u,v,e,a1,a0

    u=U(1)
    v=U(2)
    e=PAR(1)
    a1=PAR(2)
    a0=PAR(3)

    F(1)= u-u**3-v 
    F(2)= e*(u-a1*v-a0)

  END SUBROUTINE FF
Run Code Online (Sandbox Code Playgroud)

我设法在SymPy中创建正确的表达式,但我还没弄清楚如何生成所需的代码codegen.这是我到目前为止的尝试:

from sympy import symbols,latex
from sympy.utilities.codegen import codegen
from sympy.tensor import IndexedBase, Idx
from sympy import Matrix
U, PAR = symbols('U PAR', cls=IndexedBase)

u = U[1]
v = U[2]

e = …
Run Code Online (Sandbox Code Playgroud)

python code-generation sympy python-2.7 codegen

9
推荐指数
1
解决办法
248
查看次数

如何使用 SWC 生成 TypeScript 代码

我希望在 Rust 中使用SWC来生成一些 TypeScript 代码。不幸的是,发射器似乎只能打印 JavaScript。这是正确的,还是有办法打印 TypeScript?例如,假设我们正在制作以下 AST。

use swc_atoms::js_word;
use swc_common::{BytePos, Span, SyntaxContext};
use swc_ecmascript;
use swc_ecmascript::ast;

fn main() {
    let program = ast::Program::Module(ast::Module {
        body: vec![ast::ModuleItem::ModuleDecl(ast::ModuleDecl::ExportDecl(
            ast::ExportDecl {
                decl: ast::Decl::TsTypeAlias(ast::TsTypeAliasDecl {
                    span: Span::default(),
                    declare: false,
                    id: ast::Ident::new(js_word!(""), Span::default()),
                    type_params: None,
                    type_ann: Box::new(ast::TsType::TsKeywordType(ast::TsKeywordType {
                        span: Span::default(),
                        kind: ast::TsKeywordTypeKind::TsStringKeyword,
                    })),
                }),
                span: Span::default(),
            },
        ))],
        shebang: None,
        span: Span::new(BytePos(1), BytePos(1), SyntaxContext::empty()),
    });
}
Run Code Online (Sandbox Code Playgroud)

如何获取与programAST 对应的 TypeScript?

abstract-syntax-tree rust codegen typescript swc-compiler

9
推荐指数
1
解决办法
1917
查看次数

如何使用 java / kotlin 中的注释处理将方法附加到现有类?

我是注释处理和代码生成的新手。我想知道如何执行这样的操作,比如将新方法附加到现有类。这是我想要做的一个例子:

假设我们有一个带有自定义注释的类,如下所示:

class SourceClass {
    @CustomAnnotation
    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    @CustomAnnotation
    fun annotatedFun2(vararg argument: Any) {
        //Do something
    }

    fun someOtherFun() {
        //Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

我想得到的结果 - 该类的扩展副本:

class ResultClass {
    fun hasFunWithName(name: String): Boolean {
        return (name in arrayOf("annotatedFun1", "annotatedFun2"))
    }

    fun callFunByName(name: String, vararg arguments: Any) {
        when (name) {
            "annotatedFun1" -> annotatedFun1(*arguments)
            "annotatedFun2" -> annotatedFun2(*arguments)
        }
    }

    fun annotatedFun1(vararg argument: Any) {
        //Do something
    }

    fun annotatedFun2(vararg argument: Any) {
        //Do something …
Run Code Online (Sandbox Code Playgroud)

java annotations codegen kotlin kapt

8
推荐指数
1
解决办法
887
查看次数

openapi 3.0 有效的最小值和最大值

我的 openapi 合约中有以下模式定义来表示commission amount

commissionAmount:
  type: number
  minimum: -99999.99
  maximum: 99999.99
Run Code Online (Sandbox Code Playgroud)

生成的代码:

@Valid
@DecimalMin("-99999.99") @DecimalMax("99999.99") 
public BigDecimal getCommissionAmount() {
  return commAmt;
}
Run Code Online (Sandbox Code Playgroud)

生成的代码很好并且符合预期。我只是想知道这些-99999.99以及和99999.99的有效值。minimummaximum

提出这个问题的原因是它没有检查小数部分的限制。例如,我期望12345.678is invalid ,12345.67is valid 。但它将两者标记为有效。

I read@Digits用于检查整数和小数部分的位数限制。我如何告诉也openapi-generator-maven-plugin进行注释?Digits

预期生成的代码:

@Valid
@Digits(integer = 5, fraction = 2)
@DecimalMin("-99999.99") @DecimalMax("99999.99") 
public BigDecimal getCommissionAmount() {
  return commAmt;
}
Run Code Online (Sandbox Code Playgroud)

java codegen openapi openapi-generator

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

GraphQL:POST 正文丢失、内容类型无效或 JSON 对象没有键

我正在尝试创建一个突变,但我不断发现 POST 正文丢失。我可以在调用 urql 和 codegen 挂钩之前记录数据,并且可以在错误的变量中看到数据,但 chrome 不断因“POST body Missing”错误而崩溃,并且服务器的解析器永远不会被命中。

我在 React Client 上使用 Urql 和 Codegen,并在 Express API 上使用 Apollo-server。

这是我的代码:

突变定义(用于代码生成)

mutation UserLogin($email: String!, $password: String!) {
  login(email: $email, password: $password) {
    errors {
      email {
        error
        isValid
      }
      password {
        error
        isValid
      }
    }
    token
  }
}
Run Code Online (Sandbox Code Playgroud)

代码生成输出:

mutation UserLogin($email: String!, $password: String!) {
  login(email: $email, password: $password) {
    errors {
      email {
        error
        isValid
      }
      password {
        error
        isValid
      }
    }
    token
  }
} …
Run Code Online (Sandbox Code Playgroud)

codegen graphql urql

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