作為開發者,天天都要與源代碼打交道,面對不同版本,不同語言的代碼進行比較、分析,理順開發流程往往是開發者的日常。近日,一款名為Semantic的源代碼分析比較工具一舉登上了GitHub趨勢榜榜首,一起來看看!
作為開發者,你是否對不同源代碼段之間的解析和比較困惑不已呢?今天的GitHub趨勢熱榜上排名第一的帖子介紹了一款多語言支持的“超級命令行工具”Semantic,或許可以解決這個令人頭疼的問題。
Semantic是一個Haskell庫,也是一個用于分析和比較源代碼的命令行工具。
本文將從應用功能、語言支持、開發、技術和架構、許可等五個方面介紹Semantic這款工具。
用途及功能:源代碼解析、比較、圖應用
解析(Parse)
Usage: semantic parse ([--sexpression] | [--json] | [--json-graph] | [--symbols] | [--dot] | [--show] | [--quiet]) [FILES.。.] Generate parse trees for path(s)Available options: --sexpression Output s-expression parse trees (default) --json Output JSON parse trees --json-graph Output JSON adjacency list --symbols Output JSON symbol list --dot Output DOT graph parse trees --show Output using the Show instance (debug only, format subject to change without notice) --quiet Don‘t produce output, but show timing stats
比較(Diff)
Usage: semantic diff ([--sexpression] | [--json] | [--json-graph] | [--toc] | [--dot] | [--show]) [FILE_A] [FILE_B] Compute changes between pathsAvailable options: --sexpression Output s-expression diff tree (default) --json Output JSON diff trees --json-graph Output JSON diff trees --toc Output JSON table of contents diff summary --dot Output the diff as a DOT graph --show Output using the Show instance (debug only, format subject to change without notice)
圖(Graph)
Usage: semantic graph ([--imports] | [--calls]) [--packages] ([--dot] | [--json] | [--show]) ([--root DIR] [--exclude-dir DIR] DIR:LANGUAGE | FILE | --language ARG (FILES.。. | --stdin)) Compute a graph for a directory or from a top-level entry point moduleAvailable options: --imports Compute an import graph (default) --calls Compute a call graph --packages Include a vertex for the package, with edges from it to each module --dot Output in DOT graph format (default) --json Output JSON graph --show Output using the Show instance (debug only, format subject to change without notice) --root DIR Root directory of project. Optional, defaults to entry file/directory. --exclude-dir DIR Exclude a directory (e.g. vendor) --language ARG The language for the analysis. --stdin Read a list of newline-separated paths to analyze from stdin.
開發環境及版本要求
我們使用cabal的Nix風格的本地版本進行開發。要快速入門,可以按照下圖中的步驟:
git clone git@github.com:github/semantic.gitcd semanticgit submodule sync --recursive && git submodule update --init --recursive --forcecabal new-updatecabal new-buildcabal new-testcabal new-run semantic -- --help
Semantic最低要求GHC 8.6.4。我們建議使用ghcup沙箱GHC版本。我們使用的版本基于StackageLTS版。目前的LTS版本是13.13。如果您愿意,也可以使用堆棧版。
技術和架構特征
從架構上看,Semantic具備以下特點:
可以讀取blob。
可以為樹形保護程序的blob生成解析樹(用于編程工具的增量解析系統)。
將這些樹分配為語法的通用表示。
執行分析,計算差異,或僅返回解析樹。
以多種支持格式呈現輸出。
Semantic利用了許多有趣的算法和技術:
Myers算法(SES)如論文An O(ND)差分算法及其變化所述
RWS-Diff:在分層數據中靈活高效的變化檢測中描述的RWS。
可以單獨打開Union和數據類型。
簡要定義解釋器(Abstracting Definitional Interpreters)的實現。可擴展為基于語法術語的單點表示。
關于授權許可
Semantic基于MIT許可。
-
源代碼
+關注
關注
96文章
2945瀏覽量
66747 -
GitHub
+關注
關注
3文章
471瀏覽量
16442
原文標題:GitHub趨勢榜第一:超級命令行工具Semantic,比較解析源代碼
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論