作為開發(fā)者,天天都要與源代碼打交道,面對(duì)不同版本,不同語(yǔ)言的代碼進(jìn)行比較、分析,理順開發(fā)流程往往是開發(fā)者的日常。近日,一款名為Semantic的源代碼分析比較工具一舉登上了GitHub趨勢(shì)榜榜首,一起來看看!
作為開發(fā)者,你是否對(duì)不同源代碼段之間的解析和比較困惑不已呢?今天的GitHub趨勢(shì)熱榜上排名第一的帖子介紹了一款多語(yǔ)言支持的“超級(jí)命令行工具”Semantic,或許可以解決這個(gè)令人頭疼的問題。
Semantic是一個(gè)Haskell庫(kù),也是一個(gè)用于分析和比較源代碼的命令行工具。
本文將從應(yīng)用功能、語(yǔ)言支持、開發(fā)、技術(shù)和架構(gòu)、許可等五個(gè)方面介紹Semantic這款工具。
用途及功能:源代碼解析、比較、圖應(yīng)用
解析(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.
開發(fā)環(huán)境及版本要求
我們使用cabal的Nix風(fēng)格的本地版本進(jìn)行開發(fā)。要快速入門,可以按照下圖中的步驟:
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。如果您愿意,也可以使用堆棧版。
技術(shù)和架構(gòu)特征
從架構(gòu)上看,Semantic具備以下特點(diǎn):
可以讀取blob。
可以為樹形保護(hù)程序的blob生成解析樹(用于編程工具的增量解析系統(tǒng))。
將這些樹分配為語(yǔ)法的通用表示。
執(zhí)行分析,計(jì)算差異,或僅返回解析樹。
以多種支持格式呈現(xiàn)輸出。
Semantic利用了許多有趣的算法和技術(shù):
Myers算法(SES)如論文An O(ND)差分算法及其變化所述
RWS-Diff:在分層數(shù)據(jù)中靈活高效的變化檢測(cè)中描述的RWS。
可以單獨(dú)打開Union和數(shù)據(jù)類型。
簡(jiǎn)要定義解釋器(Abstracting Definitional Interpreters)的實(shí)現(xiàn)??蓴U(kuò)展為基于語(yǔ)法術(shù)語(yǔ)的單點(diǎn)表示。
關(guān)于授權(quán)許可
Semantic基于MIT許可。
-
源代碼
+關(guān)注
關(guān)注
96文章
2945瀏覽量
66730 -
GitHub
+關(guān)注
關(guān)注
3文章
468瀏覽量
16427
原文標(biāo)題:GitHub趨勢(shì)榜第一:超級(jí)命令行工具Semantic,比較解析源代碼
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論