タグ

関連タグで絞り込む (2)

タグの絞り込みを解除

astに関するono_matopeのブックマーク (4)

  • go/typesパッケージを使い変数名をリネームしてみる #golang - Qiita

    はじめに Goには、gorenameという識別子をリネームするリファクタリングツールがあります。 以下のようにgo getすることで使用することができます。 また、「gorenameをライブラリとして使う」とう記事にも書いたとおり、gorenameはライブラリとしても利用することができます。 この記事では、gorenameほどは高機能では無いものの、ローカル変数のリネームをgo/typesパッケージの提供する機能で実装してみます。 なお、この記事を書いた時点のGoの最新バージョンは1.7.4です。 指定した位置にある識別子を取得する gorenameもそうですが、多くのリファクタリングツールでは、「何」を対象にリファクタリングを行うか、以下の2種類の方法で指定することが多いでしょう。 ずばり対象とするものを指定(この場合だと対象となる識別子) 対象となるもののソースコード上の位置 ソースコ

    go/typesパッケージを使い変数名をリネームしてみる #golang - Qiita
    ono_matope
    ono_matope 2020/01/24
    types.Info, types.Object の使い方理解
  • go/typesパッケージを使って型チェックを行なうハンズオンを作った #golangtokyo - My External Storage

    なぜ作ったのか 今回golang.tokyoで静的解析のハンズオンをすることになった。 golang.tokyoでは以前から静的解析を含めたハンズオンを提供していたが型チェック(go/types)についてのハンズオンはまだなかった。 私自身今年のはじめあたりから静的解析を初めたが、まだgo/typesパッケージはあまり触ったことがなかったのでこの機会に学習することにした。 参考にした記事 今回の資料を作るにあたって以下の記事を参考にした。また、そもそもとして、ハンズオン資料のネタ出しは@tenntennさんにしてもらった。 (全てのネタをハンズオンに含めることはできなかったのだが、)自分にとっていい具合にストレッチした課題(ネタ)だった。圧倒的に感謝! go/typesのGodoc https://golang.org/pkg/go/types/ 当たり前だがgo/typesのGo Doc

    go/typesパッケージを使って型チェックを行なうハンズオンを作った #golangtokyo - My External Storage
  • 抽象構文木(AST)をいじってフォーマットをかける #golang - Qiita

    はじめに Goには、gofmtというコマンドがあることはご存知かと思います。 そして、そのフォーマットがGoコミュニティの標準となっています。 go/formatパッケージでは、gofmtと同じスタイルのフォーマットでソースコードを整形することができます。 また、go/formatパッケージを使うと、ASTについても整形することがきます。 この記事では、ASTのノードをいじって、整形する方法について説明します。 なお、この記事を書いた2016年12月現在のGoのバージョンは1.7.4が最新です。 ASTをいじる ASTをいじると書きましたが、具体的に何をするんでしょうか? ここでは、AST上のノードを別のノードに入れ替えたり、ノードのフィールドを差し替えることを指しています。 たとえば、x+yという式があった場合、このxとyをそれぞれ10と20に置き換えて、10+20のような式に変えたいと

    抽象構文木(AST)をいじってフォーマットをかける #golang - Qiita
    ono_matope
    ono_matope 2020/01/24
    なるほど!
  • Goの抽象構文木(AST)を手入力してHello, Worldを作る #golang - Qiita

    はじめに タイトルを見て、「はて?何を言ってるんだろう」と思った方もいるでしょう。 その通りです。通常、抽象構文木(AST)を取得するには、「ASTを取得する方法を調べる」で解説したように、go/parserパッケージの関数を使ってソースコードをパースする必要があります。 しかし、この記事では温かみのある手入力をすることで、日頃なんとなく取得しているASTがどういうノードで構築されているのか、最低限必要なフィールドは何なのかということを改めて知ることを目的としています。 なお、この記事を書いた時のGoの最新バージョンは1.7.4です。 今回作るコード 今回はかのプログラム言語Cやプログラミング言語Goで有名なHello, Worldを出力するプログラムを作りたいと思います。 具体的には、以下のようなコードです。 なお、せっかくなので、ここではGoっぽく、Hello, 世界としています。 p

    Goの抽象構文木(AST)を手入力してHello, Worldを作る #golang - Qiita
    ono_matope
    ono_matope 2020/01/24
    なるほどー
  • 1