GoAst Viewer Golang AST visualizer. @yuroyoro | https://github.com/yuroyoro/goast-viewer Source Parse AST Tree Collapse all Expand all Dump {{ dump }}
こんにちは、 ast-grepの作者Herringtonです。 正規表現でコードを検索したことがある方なら、複数行のマッチングや入れ子構造の処理、コメントの無視などに苦労したことがあるかもしれません。 そこで、ast-grep VSCodeという新しい拡張を紹介します。これは、構造的検索と置換(SSR)という技術を利用して、より正確で効率的な検索と置換を実現するツールです。 構造検索は? テキスト検索と置換の限界 例えば、JavaScriptコードをリファクタリングして、lodash の _.filter 関数をネイティブの Array.prototype.filter メソッド に置き換えたいとします。単純なテキスト検索と置換は次のようになります: これは一部のケースではうまくいくかもしれませんが、いくつかの問題があります。 一行の式しかマッチングできません。コードが複数行にまたがってい
大規模なコードベース向けの高速なASTツールとしてast-grepというものがある。これについての調査メモ。 主に以下の公式ドキュメントを読み進めて、利用方法、パターンやルールの詳細などについて理解を深める。 ast-grepとは 公式ドキュメントでは、コードの検索からLint、codemodに至るまでASTツールとして網羅的にカバーできるツールであることが以下のように表現されている。 Think ast-grep as an hybrid of grep, eslint and codemod. 結果に精度が求められる場面では、高速であるものの精密さに欠けるテキストベースではなく、ASTベースでの正確な解析の方が望ましいだろうけど、ASTでの記述は非常に面倒になりがちという側面がある。 その点においてast-grepは、テキストベースでのgrepではなく、ASTベースでのgrepというよ
はじめに こんにちは、LayerXの id:convto です。 そしてこれは LayerX アドベントカレンダー (概念) の1日目の記事です。 アドベントカレンダー盛り上げていくぞ〜ということで11月から始まるらしいです。だいぶフライングしてるけど枠もかなり埋まっててすごい。 せっかくなのでお祭り参加したいぞ〜ということで一発目です。よろしくお願いします。 静的解析つくろうとしたきっかけ ちょうどつい最近記事になった下記の輪読会がきっかけでした。 tech.layerx.co.jp このなかで、mapのrange accesssについて、元mapのcopyを取らないから破壊するとループ挙動が壊れる可能性がある旨が言及されていました。 そのときは雑談で「range accessしてるmapに再代入してたら怒る!みたいな考え方で整理したら静的解析できそうっすよね〜」みたいな話をしたんですが
We’re going to write useful linter for Go using go/analysis. Then we will integrate it into go vet and golangci-lint. What to lint Let’s find all printf-like functions that don’t end with f. It’s the Go convention to name such functions with f at the end: fmt.Sprintf, fmt.Errorf, fmt.Printf, fmt.Fprintf, fmt.Scanf, fmt.Sscanf, log.Printf, log.Fatalf, log.Panicf. Writing a simple linter Sample prog
本書は技術書典6で@knsh14と共に執筆し、頒布したものです。(移動にあたってこっそり更新はしましたが)2022年5月現在では内容が古くなっている可能性があります。最新の情報を知りたい場合は公式ドキュメントまたは httsp://tenn.in/analhysis をご覧ください。 読者のみなさんは静的解析ツールを自作したことはありますか?コードレビューで頻出するような指摘事項は静的解析ツールを使って自動化するとコードレビューに取られる工数が減ります。golintやgo vetなどは使っている方は多いでしょう。 標準のものやサードパーティ製など様々な静的解析ツールを見かけます。しかし、自分たちの開発チームの事情を汲んだ静的解析ツールを見つけるのは難しいでしょう。そんなときに諦めてしまわずに自作するという選択肢があります。 本書はGoで静的解析を行う際に逆引きとして使えるように書いています
はじめに 皆さんはgorenameというツールをご存知でしょうか? golang.org/x/tools/cmd/gorenameで公開されている、Goのリファクタリングツールです。 ここでは、このツールを自分のコード上でライブラリとして使う方法と使いやすいリファクタリングツールの形について説明できればと思います。 なお、ここで扱う話はVimConf 2016において、エディタの壁を越えるGoの開発ツールの文化と作成法(ビデオ)というタイトルで話したものと、一部重複していますので、そちらもよかったら見て下さい。 gorenameを使ってみる まずは、gorenameをインストールして使ってみましょう。すでに使ったことある方はここは飛ばしてもらって構いません。 もしかすると、お使いのIDEやエディタによってすでにインストールされているかもしれません。 vim-goをお使いの方は、:GoRe
はじめにGo言語では、標準パッケージであるgoパッケージが字句解析や構文解析を行う機能を提供しています。 go/astやgo/parserを使って構文解析のはじめの一歩を踏み出してみます。 参考Qiita | goパッケージで簡単に静的解析して世界を広げよう #golang 静的解析を学ぶ際に参考になる記事のまとめ(tenntennさん筆)用語説明静的解析とは静的コード解析、静的プログラム解析とも言います。 ソースコードを 実行することなく 解析を行うことを指します。 対義語は動的解析で、ソースコードを実行して解析を行うことを表します。 こちらはプログラマが普段行なっているような検証方法です。 抽象構文木(AST)とはabstract syntax tree. 構文解析の経過や結果から、言語の意味に関係ない情報を取り除き、意味に関係ある情報のみを取り出したツリー状(木)のデータ構造のことで
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く