效率一个堪称神器的命令行工具,GitHub标星7.5K!
Posted 机器学习算法与Python学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了效率一个堪称神器的命令行工具,GitHub标星7.5K!相关的知识,希望对你有一定的参考价值。
(给机器学习算法与Python学习加星标,提升AI技能)
开源最前线(ID:OpenSourceTop) 猿妹编译
编译自:https://github.com/github/semantic
GitHub上的实用工具还是挺多的,这不,又让我找到了一个堪称神器的支持多语言的命令行工具——Semantic,Semantic是一个解析,分析和比较多种语言源代码的命令行工具,也是一个Haskell库。
平常解析源代码也算是程序员的家常便饭了,如果有个工具帮你一把那是最好不过的了,Semantic具体如何使用,下面一说你就明白了:
首先呢,运行semantic --help获取最新的完整选项列表:
解析
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
Semantic使用树形图来生成解析树,现在我们拿一个简单的程序来解析你会看的更明了,打开test.A.py文件,粘贴如下:
def Foo(x):
return x
print Foo("hi")
现在,让我们生成一个抽象语法树(AST)
$ semantic parse test.A.py
(Statements
(Annotation
(Function
(Identifier)
(Identifier)
(Return
(Identifier)))
(Empty))
(Call
(Identifier)
(Call
(Identifier)
(TextElement)
(Empty))
(Empty)))
默认的s-expression输出是一种很好的格式,可以快速可视化代码结构。我们可以看到有一个声明的函数,然后有一个调用表达式,嵌套在另一个调用表达式中,它与函数调用print和Foo。你还可以使用其他的输出格式。
DIFF(比较)
Usage: semantic diff ([--sexpression] | [--json] | [--json-graph] | [--toc] |
[--dot] | [--show]) [FILE_A] [FILE_B]
Compute changes between paths
Available 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 module
Available 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.
语言支持
多语言支持是Semantic的一大优势,目前支持Ruby、javascript、typescript、Python、Go、php、Java等主流编程语言都支持
Semantic最低要求GHC 8.6.4和Cabal 2.4,建议使用ghcup沙箱GHC版本,为通过操作系统的软件包管理器安装的GHC软件包可能无法安装静态链接版本的GHC启动库。
git clone git@github.com:github/semantic.git
cd semantic
script/bootstrap
cabal new-build
cabal new-test
cabal new-run semantic -- --help
推荐阅读
以上是关于效率一个堪称神器的命令行工具,GitHub标星7.5K!的主要内容,如果未能解决你的问题,请参考以下文章
Github标星115K,这个文件传输神器别告诉我你还不知道