成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我在GitHub上又找到一個(gè)堪稱(chēng)神器的命令行工具

開(kāi)發(fā) 開(kāi)發(fā)工具
GitHub上的實(shí)用工具還是挺多的,這不,又讓我找到了一個(gè)堪稱(chēng)神器的支持多語(yǔ)言的命令行工具——Semantic,Semantic是一個(gè)解析,分析和比較多種語(yǔ)言源代碼的命令行工具,也是一個(gè)Haskell庫(kù)。

GitHub上的實(shí)用工具還是挺多的,這不,又讓我找到了一個(gè)堪稱(chēng)神器的支持多語(yǔ)言的命令行工具——Semantic,Semantic是一個(gè)解析,分析和比較多種語(yǔ)言源代碼的命令行工具,也是一個(gè)Haskell庫(kù)。

[[399817]]

平常解析源代碼也算是程序員的家常便飯了,如果有個(gè)工具幫你一把那是最好不過(guò)的了,Semantic具體如何使用,猿妹下面一說(shuō)你就明白了:

首先呢,運(yùn)行semantic --help獲取最新的完整選項(xiàng)列表:

解析

  1. Usage: semantic parse ([--sexpression] | [--json] | [--json-graph] | [--symbols] 
  2.                       | [--dot] | [--show] | [--quiet]) [FILES...] 
  3.   Generate parse trees for path(s) 
  4.  
  5. Available options: 
  6.   --sexpression            Output s-expression parse trees (default) 
  7.   --json                   Output JSON parse trees 
  8.   --json-graph             Output JSON adjacency list 
  9.   --symbols                Output JSON symbol list 
  10.   --dot                    Output DOT graph parse trees 
  11.   --show                   Output using the Show instance (debug only, format 
  12.                            subject to change without notice) 
  13.   --quiet                  Don't produce output, but show timing stats 

Semantic使用樹(shù)形圖來(lái)生成解析樹(shù),現(xiàn)在我們拿一個(gè)簡(jiǎn)單的程序來(lái)解析你會(huì)看的更明了,打開(kāi)test.A.py文件,粘貼如下:

  1. def Foo(x): 
  2.     return x 
  3. print Foo("hi") 

現(xiàn)在,讓我們生成一個(gè)抽象語(yǔ)法樹(shù)(AST)

  1. $ semantic parse test.A.py 
  2. (Statements 
  3.   (Annotation 
  4.     (Function 
  5.       (Identifier) 
  6.       (Identifier) 
  7.       (Return 
  8.         (Identifier))) 
  9.     (Empty)) 
  10.   (Call 
  11.     (Identifier) 
  12.     (Call 
  13.       (Identifier) 
  14.       (TextElement) 
  15.       (Empty)) 
  16.     (Empty))) 

默認(rèn)的s-expression輸出是一種很好的格式,可以快速可視化代碼結(jié)構(gòu)。我們可以看到有一個(gè)聲明的函數(shù),然后有一個(gè)調(diào)用表達(dá)式,嵌套在另一個(gè)調(diào)用表達(dá)式中,它與函數(shù)調(diào)用print和Foo。你還可以使用其他的輸出格式。

DIFF(比較)

  1. Usage: semantic diff ([--sexpression] | [--json] | [--json-graph] | [--toc] | 
  2.                      [--dot] | [--show]) [FILE_A] [FILE_B] 
  3.   Compute changes between paths 
  4.  
  5. Available options: 
  6.   --sexpression            Output s-expression diff tree (default) 
  7.   --json                   Output JSON diff trees 
  8.   --json-graph             Output JSON diff trees 
  9.   --toc                    Output JSON table of contents diff summary 
  10.   --dot                    Output the diff as a DOT graph 
  11.   --show                   Output using the Show instance (debug only, format 
  12.                            subject to change without notice) 

Graph(圖)

  1. Usage: semantic graph ([--imports] | [--calls]) [--packages] ([--dot] | [--json] 
  2.                       | [--show]) ([--root DIR] [--exclude-dir DIR] 
  3.                       DIR:LANGUAGE | FILE | --language ARG (FILES... | --stdin)) 
  4.   Compute a graph for a directory or from a top-level entry point module 
  5.  
  6. Available options: 
  7.   --imports                Compute an import graph (default) 
  8.   --calls                  Compute a call graph 
  9.   --packages               Include a vertex for the package, with edges from it 
  10.                            to each module 
  11.   --dot                    Output in DOT graph format (default) 
  12.   --json                   Output JSON graph 
  13.   --show                   Output using the Show instance (debug only, format 
  14.                            subject to change without notice) 
  15.   --root DIR               Root directory of project. Optional, defaults to 
  16.                            entry file/directory. 
  17.   --exclude-dir DIR        Exclude a directory (e.g. vendor) 
  18.   --language ARG           The language for the analysis. 
  19.   --stdin                  Read a list of newline-separated paths to analyze 
  20.                            from stdin. 

語(yǔ)言支持

多語(yǔ)言支持是Semantic的一大優(yōu)勢(shì),目前支持Ruby、JavaScript、typescript、Python、Go、PHP、Java等主流編程語(yǔ)言都支持

Semantic最低要求GHC 8.6.4和Cabal 2.4,建議使用ghcup沙箱GHC版本,為通過(guò)操作系統(tǒng)的軟件包管理器安裝的GHC軟件包可能無(wú)法安裝靜態(tài)鏈接版本的GHC啟動(dòng)庫(kù)。

  1. git clone git@github.com:github/semantic.git 
  2. cd semantic 
  3. script/bootstrap 
  4. cabal new-build 
  5. cabal new-test 
  6. cabal new-run semantic -- --help 

創(chuàng)建者使用cabal的Nix風(fēng)格的本地版本進(jìn)行開(kāi)發(fā)。要快速入門(mén),可以按照以上操作。

目前,semantic已經(jīng)在GitHub上獲得 8000 個(gè)Star,450 個(gè)Fork,感興趣的可以到GitHub上查閱更多詳情

(GitHub地址:https://github.com/github/semantic)。

 

責(zé)任編輯:趙寧寧 來(lái)源: 開(kāi)源最前線
相關(guān)推薦

2020-12-08 10:33:56

DDoS攻擊開(kāi)源安全安全工具

2021-02-04 11:11:08

開(kāi)發(fā)技能工具

2021-02-04 11:46:49

GithubSQL工具Franchise

2011-06-17 16:49:05

Cocoa蘋(píng)果

2022-01-26 18:59:08

Python工具

2021-06-03 10:34:43

GitHub停車(chē)系統(tǒng)項(xiàng)目

2022-01-11 09:05:07

工具Python 命令行

2016-08-10 12:41:00

Linux工具bcShell

2019-09-09 15:43:29

UnixLinux命令行

2019-06-10 15:00:27

node命令行前端

2019-02-27 09:24:48

命令行文件Linux

2012-07-11 13:35:25

UnixLinux

2023-03-08 15:38:56

Linux命令dict

2014-06-17 09:49:07

Ngxtop實(shí)時(shí)監(jiān)控Nginx

2019-05-30 10:40:04

ddgrLinuxDuckDuckGo

2022-02-17 18:21:47

工具HTTPie客戶(hù)端

2020-12-08 08:46:07

GoJava工具

2017-05-27 14:45:04

Linux命令進(jìn)程

2015-07-13 11:05:31

Linuxlolcat

2016-09-23 20:16:23

TaskwarriorLinux命令行工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 天天干天天干 | 国产2区 | 一区二区三区四区免费观看 | 一区二区三区精品视频 | 成人国产精品色哟哟 | 日本不卡一区二区三区在线观看 | 色综合久 | 黄色毛片在线观看 | 亚洲欧美一区二区三区国产精品 | 91一区二区在线观看 | 日韩一级电影免费观看 | 欧美久久久久久 | 亚洲午夜电影 | 亚洲一区国产 | 特黄一级 | 欧美在线色 | 午夜久久久久久久久久一区二区 | 色婷婷影院| 九九亚洲 | 国产精品国产精品国产专区不卡 | 成人二区三区 | 欧美激情在线精品一区二区三区 | 国产亚洲精品成人av久久ww | 丝袜美腿av | 9porny九色视频自拍 | 欧美色图另类 | 欧美一区二区三区视频 | 亚洲91 | 久久久久亚洲 | 中文字幕免费观看 | 久久亚洲二区 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 华丽的挑战在线观看 | 中文av在线播放 | 看av网址| 国产1区2区3区 | av影音在线 | av天天看| 一级黄色片在线看 | 日韩综合一区 | 国精日本亚洲欧州国产中文久久 |