All Projects → google → Verible

google / Verible

Licence: apache-2.0
Verible is a suite of SystemVerilog developer tools, including a parser, style-linter, and formatter.

Projects that are alternatives of or similar to Verible

Psscriptanalyzer
Download ScriptAnalyzer from PowerShellGallery
Stars: ✭ 1,137 (+196.09%)
Mutual labels:  linter, hacktoberfest, formatter
Isort
A Python utility / library to sort imports.
Stars: ✭ 4,377 (+1039.84%)
Mutual labels:  linter, hacktoberfest, formatter
Graphql Go Tools
Tools to write high performance GraphQL applications using Go/Golang.
Stars: ✭ 96 (-75%)
Mutual labels:  linter, lexer, parser
Godot Gdscript Toolkit
Independent set of GDScript tools - parser, linter and formatter
Stars: ✭ 214 (-44.27%)
Mutual labels:  linter, parser, formatter
Syntax Parser
Light and fast 🚀parser! With zero dependents. - Sql Parser Demo added!
Stars: ✭ 317 (-17.45%)
Mutual labels:  lexer, parser
Kgt
BNF wrangling and railroad diagrams
Stars: ✭ 312 (-18.75%)
Mutual labels:  syntax-tree, parser
Stan
🕵️ Haskell STatic ANalyser
Stars: ✭ 386 (+0.52%)
Mutual labels:  analysis, hacktoberfest
Exakat
The Exakat Engine : smart static analysis for PHP
Stars: ✭ 346 (-9.9%)
Mutual labels:  linter, analysis
Super Productivity
To-do list & time tracker for programmers and other digital workers with Jira, Github, and Gitlab integration
Stars: ✭ 4,505 (+1073.18%)
Mutual labels:  productivity, hacktoberfest
Detekt
Static code analysis for Kotlin
Stars: ✭ 4,169 (+985.68%)
Mutual labels:  linter, analysis
Sh
A shell parser, formatter, and interpreter with bash support; includes shfmt
Stars: ✭ 4,343 (+1030.99%)
Mutual labels:  parser, formatter
Horusec
Horusec is an open source tool that improves identification of vulnerabilities in your project with just one command.
Stars: ✭ 311 (-19.01%)
Mutual labels:  analysis, hacktoberfest
Gts
☂️ TypeScript style guide, formatter, and linter.
Stars: ✭ 3,714 (+867.19%)
Mutual labels:  linter, formatter
Todocheck
A static code analyzer for annotated TODO comments
Stars: ✭ 322 (-16.15%)
Mutual labels:  productivity, hacktoberfest
Prettier Eslint
Code ➡️ prettier ➡️ eslint --fix ➡️ Formatted Code ✨
Stars: ✭ 3,435 (+794.53%)
Mutual labels:  hacktoberfest, formatter
Code Sleep Python
Awesome Projects in Python - Machine Learning Applications, Games, Desktop Applications all in Python 🐍
Stars: ✭ 306 (-20.31%)
Mutual labels:  analysis, hacktoberfest
Autoflake
Removes unused imports and unused variables as reported by pyflakes
Stars: ✭ 362 (-5.73%)
Mutual labels:  linter, formatter
Javaparser
Java 1-15 Parser and Abstract Syntax Tree for Java, including preview features to Java 13
Stars: ✭ 3,972 (+934.38%)
Mutual labels:  syntax-tree, parser
Excalidraw
Virtual whiteboard for sketching hand-drawn like diagrams
Stars: ✭ 25,509 (+6542.97%)
Mutual labels:  productivity, hacktoberfest
Exprtk
C++ Mathematical Expression Parsing And Evaluation Library
Stars: ✭ 301 (-21.61%)
Mutual labels:  lexer, parser

Verible

License Continuous Integration

The Verible project's main mission is to parse SystemVerilog (IEEE 1800-2017) (as standardized in the SV-LRM) for a wide variety of applications, including developer tools.

It was born out of a need to parse un-preprocessed source files, which is suitable for single-file applications like style-linting and formatting. In doing so, it can be adapted to parse preprocessed source files, which is what real compilers and toolchains require.

The spirit of the project is that no-one should ever have to develop a SystemVerilog parser for their own application, because developing a standard-compliant parser is an enormous task due to the syntactic complexity of the language. Verible's parser is also regularly tested against an ever-growing suite of (tool-independent) language compliance tests at https://symbiflow.github.io/sv-tests/.

A lesser (but notable) objective is that the language-agnostic components of Verible be usable for rapidly developing language support tools for other languages.

Developers, Welcome

For source code browsing, we recommend using the fully-indexed and searchable mirror at https://cs.opensource.google/verible/verible.

If you'd like to contribute, check out the contributing guide and the development resources.

Build

Verible's code base is written in C++.

To build, you need the bazel build system and a C++11 compatible compiler (e.g. >= g++-7; Using clang currently fails to compile the m4 dependency).

# Build all tools and libraries
bazel build -c opt //...

You can access the generated artifacts under bazel-bin/. For instance the syntax checker will be at bazel-bin/verilog/tools/syntax/verible-verilog-syntax (corresponding to the target name //verilog/tools/syntax:verible-verilog-syntax).

Installation

For simple installation, we provide regular binary releases.

If you prefer to build and install the binaries locally yourself:

# In your home directory
bazel run -c opt :install -- ~/bin

# For a system directory that requires root-access, call with -s option.
# (Do _not_ run bazel with sudo.)
bazel run -c opt :install -- -s /usr/local/bin

Test

We strongly encourage running the test suite using bazel:

# Run all tests
bazel test -c opt //...

Mailing Lists

Join the Verible community!

SystemVerilog Developer Tools

Parser

Learn more about the parser implementation here.

We provide a standalone verible-verilog-syntax tool to help with visualizing the syntax structure as understood by the lexer and parser. This is very useful tor troubleshooting and understand the internal representations seen by the other tools.

The tool has an ability of exporting a concrete syntax tree in JSON format, making use of it in external tools easy. There is also a Python wrapper module and a few example scripts.

Style Linter

verible-verilog-lint identifies constructs or patterns in code that are deemed undesirable according to a style guide. The main goal is to relieve humans the burden of reviewing code for style compliance. Many lint rules use syntax tree pattern matching to find style violations.

Features:

  • Style guide citations in diagnostics
  • Rule deck configurability
  • Waiver mechanisms: in-file, external waiver file

Documentation:

Formatter

The verible-verilog-format formatter manages whitespace in accordance with a particular style. The main goal is to relieve humans of having to manually manage whitespace, wrapping, and indentation, and to provide a tool that can be integrated into any editor to enable editor-independent consistency.

Features (various degress of work-in-progress):

  • Corrects indentation
  • Corrects inter-token spacing, with syntax context awareness
  • Line-wrapping to a column limit
  • Support for incremental formatting, only touched changed lines.
  • Interactive formatting: accept or decline formatting changes
  • Tabular alignment

Lexical Diff

verible-verilog-diff compares two input files for equivalence.

Verible project tool

verible-verilog-project is a multi-tool that operates on whole Verilog projects, consisting of a file list and related configurations. This serves as a diagnostic tool for analyzing (and potentially transforming) project-level sources.

Code Obfuscator

verible-verilog-obfuscate transforms Verilog code by replacing identifiers with obfuscated names of equal length, and preserving all other text, including spaces. Output is written to stdout. The resulting file size is the same as the original. This is useful for preparing potentially sensitive test cases with tool vendors.

Preprocessor

verible-verilog-preprocessor is a collection of preprocessor-like tools, (but does not include a fully-featured Verilog preprocessor yet.)

Source Code Indexer

verible-verilog-kythe-extractor extracts indexing facts fromm SV source code using the Kythe schema, which can then enhance IDEs with linked cross-references for ease of source code navigation.

Future Intent

The Verible team is interested in exploring how it can help other tool developers in providing a SystemVerilog front end, for example, emitting an abstract syntax tree (AST). If you are interested in collaborating, contact us.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].