GithubHelp home page GithubHelp logo

mozilla / rust-code-analysis Goto Github PK

View Code? Open in Web Editor NEW
250.0 12.0 42.0 18.68 MB

Library to analyze and collect metrics on source code

Home Page: https://mozilla.github.io/rust-code-analysis/

Rust 4.61% Python 0.09% Go 0.01% JavaScript 0.07% C++ 0.03% C 95.15% Shell 0.05%
rust source-code-analysis

rust-code-analysis's Introduction

rust-code-analysis

Task Status codecov

rust-code-analysis is a Rust library to analyze and extract information from source code written in many different programming languages. It is based on a parser generator tool and an incremental parsing library called Tree Sitter.

A command line tool called rust-code-analysis-cli is provided to interact with the API of the library in an easy way.

This tool can be used to:

  • Call rust-code-analysis API
  • Print nodes and metrics information
  • Export metrics in different formats

In addition, we provide a rust-code-analysis-web tool to use the library through a REST API.

Usage

rust-code-analysis supports many types of programming languages and computes a great variety of metrics. You can find up to date documentation at Documentation.

On the Commands page, there is a list of commands that can be run to get information about metrics, nodes, and other general data provided by this software.

Building

To build the rust-code-analysis library, you need to run the following command:

cargo build

If you want to build the cli:

cargo build -p rust-code-analysis-cli

If you want to build the web server:

cargo build -p rust-code-analysis-web

If you want to build everything in one fell swoop:

cargo build --workspace

Testing

To verify whether all tests pass, run the cargo test command.

cargo test --workspace --all-features --verbose

Updating insta tests

We use insta, to update the snapshot tests you should install cargo insta

cargo insta test --review

Will run the tests, generate the new snapshot references and let you review them.

Contributing

If you want to contribute to the development of this software, have a look at the guidelines contained in our Developers Guide.

How to cite rust-code-analysis

@article{ARDITO2020100635,
    title = {rust-code-analysis: A Rust library to analyze and extract maintainability information from source codes},
    journal = {SoftwareX},
    volume = {12},
    pages = {100635},
    year = {2020},
    issn = {2352-7110},
    doi = {https://doi.org/10.1016/j.softx.2020.100635},
    url = {https://www.sciencedirect.com/science/article/pii/S2352711020303484},
    author = {Luca Ardito and Luca Barbato and Marco Castelluccio and Riccardo Coppola and Calixte Denizet and Sylvestre Ledru and Michele Valsesia},
    keywords = {Algorithm, Software metrics, Software maintainability, Software quality},
    abstract = {The literature proposes many software metrics for evaluating the source code non-functional properties, such as its complexity and maintainability. The literature also proposes several tools to compute those properties on source codes developed with many different software languages. However, the Rust language emergence has not been paired by the community’s effort in developing parsers and tools able to compute metrics for the Rust source code. Also, metrics tools often fall short in providing immediate means of comparing maintainability metrics between different algorithms or coding languages. We hence introduce rust-code-analysis, a Rust library that allows the extraction of a set of eleven maintainability metrics for ten different languages, including Rust. rust-code-analysis, through the Abstract Syntax Tree (AST) of a source file, allows the inspection of the code structure, analyzing source code metrics at different levels of granularity, and finding code syntax errors before compiling time. The tool also offers a command-line interface that allows exporting the results in different formats. The possibility of analyzing source codes written in different programming languages enables simple and systematic comparisons between the metrics produced from different empirical and large-scale analysis sources.}
}

Licenses

  • Mozilla-defined grammars are released under the MIT license.

  • rust-code-analysis, rust-code-analysis-cli and rust-code-analysis-web are released under the Mozilla Public License v2.0.

rust-code-analysis's People

Contributors

abrown avatar calixteman avatar dburriss avatar dependabot-preview[bot] avatar dependabot[bot] avatar djmitche avatar giovannitangredi avatar la0 avatar lotas avatar lu-zero avatar luni-4 avatar marco-ballario avatar marco-c avatar michaelvanstraten avatar squadrick avatar suhaibmujahid avatar sylvestre avatar tpraxl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rust-code-analysis's Issues

Build rust-code-analysis-cli with musl

We should release a rust-code-analysis-cli binary that can run on any linux system without dependencies.
This new binary should replace the one currently released through CI

Extend the README

  • Provide build instructions
  • Provide usage modes (web, cli, etc)
  • List the supported metrics

Aggregate metrics according to their language

It would be helpful to aggregate metrics produced by rust-code-analysis on different files in a single global file. The aggregation should be done according to the languages contained in a determined directory.
To do so, a possible approach with threads could be the following one:

Each thread computes the metrics for a single file and then sends the result to a handler which implements a specific trait called HandlerTrait.

HandlerTrait contains two functions:

  • merge is called by each thread at the end of its execution and adds the result of each thread to a global vector called Vec
  • finalize instead is called when each thread has finished to be run and dumps the content of Vec in the required format

Some errors with language detection

I've analyzed 20k commits and got a few problems:

Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-tabs.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionSettingsStore.jsm
Wrongly guessed c++ for toolkit/modules/CertUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionStorageSync.jsm
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browser.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browser.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browserAction.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-menus.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-pageAction.js
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed idl for xpfe/appshell/nsContentTreeOwner.h
Wrongly guessed c++ for toolkit/modules/CertUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProxyChannelFilter.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProxyChannelFilter.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProxyChannelFilter.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/ExtensionPopups.jsm
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Schemas.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed js for toolkit/modules/BrowserUtils.jsm
Wrongly guessed js2 for mobile/android/modules/FxAccountsWebChannel.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-captivePortal.js
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browser.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-tabs-base.js
Wrongly guessed idl for xpfe/appshell/nsContentTreeOwner.h
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browser.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-tabs-base.js
Wrongly guessed idl for xpfe/appshell/nsContentTreeOwner.h
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browser.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-tabs-base.js
Wrongly guessed idl for xpfe/appshell/nsContentTreeOwner.h
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/NativeMessaging.jsm
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/Subprocess.jsm
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/subprocess_shared.js
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/subprocess_shared_unix.js
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/subprocess_worker_unix.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-tabs.js
Wrongly guessed c++ for toolkit/modules/CertUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/NativeMessaging.jsm
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/Subprocess.jsm
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/subprocess_shared.js
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/subprocess_shared_unix.js
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/subprocess_worker_unix.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed js for toolkit/actors/KeyPressEventModelCheckerChild.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browsingData.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProfilerGetSymbols-worker.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProfilerGetSymbols.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProfilerGetSymbols-worker.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProfilerGetSymbols.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProfilerGetSymbols.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProfilerGetSymbols.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProfilerGetSymbols.jsm
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browserAction.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-pageAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-browserAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-pageAction.js
Wrongly guessed js for browser/actors/ClickHandlerParent.jsm
Wrongly guessed js for browser/modules/ContentClick.jsm
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browserAction.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-pageAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-browserAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-pageAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browserAction.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-pageAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-browserAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-pageAction.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browsingData.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-browsingData.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browserAction.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-pageAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-browserAction.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-pageAction.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionContent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-privacy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-privacy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-captivePortal.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-privacy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/child/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-captivePortal.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-privacy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browsingData.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browsingData.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-browsingData.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-bookmarks.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browsingData.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-history.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browser.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-windows.js
Wrongly guessed js for toolkit/modules/BrowserUtils.jsm
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-privacy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-captivePortal.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-captivePortal.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPageChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-geckoProfiler.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-geckoProfiler.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionSettingsStore.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed js for browser/actors/ClickHandlerParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/NativeManifests.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionSettingsStore.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionSettingsStore.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browsingData.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-browsingData.js
Wrongly guessed idl for xpfe/appshell/nsContentTreeOwner.h
Wrongly guessed js for toolkit/modules/BrowserUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/FindContent.jsm
Wrongly guessed coding=utf-8 for third_party/python/pip-tools/piptools/_compat/pip_compat.py
Wrongly guessed js for toolkit/modules/BrowserUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed idl for widget/gtk/nsPrintSettingsServiceGTK.h
Wrongly guessed idl for widget/windows/nsPrintSettingsServiceWin.h
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-sidebarAction.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/FindContent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-tabs.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-sidebarAction.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed idl for toolkit/components/remote/nsMacRemoteClient.h
Wrongly guessed idl for toolkit/components/remote/nsRemoteClient.h
Wrongly guessed idl for toolkit/components/remote/nsWinRemoteClient.cpp
Wrongly guessed idl for toolkit/components/remote/nsWinRemoteClient.h
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools.js
Wrongly guessed idl for toolkit/components/remote/nsMacRemoteClient.h
Wrongly guessed idl for toolkit/components/remote/nsRemoteClient.h
Wrongly guessed idl for toolkit/components/remote/nsWinRemoteClient.cpp
Wrongly guessed idl for toolkit/components/remote/nsWinRemoteClient.h
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-browser.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-tabs.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools-inspectedWindow.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools.js
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/subprocess_worker_unix.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/ExtensionPopups.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/child/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed js for toolkit/modules/BrowserUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-bookmarks.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-privacy.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/child/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/NativeManifests.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/NativeMessaging.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-bookmarks.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-menus.js
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionStorageSync.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionStorageSync.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/NativeMessaging.jsm
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-tabs.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-tabs.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-tabs.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-tabs.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-utils.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/MessageChannel.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Schemas.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ProxyChannelFilter.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionStorageSync.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/ExtensionPopups.jsm
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionParent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed js for browser/actors/ContextMenuChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/child/ext-identity.js
Wrongly guessed idl for xpfe/appshell/nsContentTreeOwner.h
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-find.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-find.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-find.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-privacy.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-tabs.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-find.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-tabs.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionXPCShellUtils.jsm
Wrongly guessed indent-tabs-mode for mobile/android/components/extensions/ext-tabs.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-windows.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionPreferencesManager.jsm
Wrongly guessed indent-tabs-mode for browser/components/extensions/child/ext-devtools-panels.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-devtools.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-tabs.js
Wrongly guessed indent-tabs-mode for browser/components/extensions/parent/ext-windows.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Extension.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionChild.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionCommon.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionContent.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/ExtensionStorageSync.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/NativeManifests.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/NativeMessaging.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/Schemas.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/child/ext-userScripts-content.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-browserSettings.js
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-proxy.js
Wrongly guessed indent-tabs-mode for toolkit/modules/subprocess/Subprocess.jsm
Wrongly guessed coding=utf-8 for third_party/python/pip-tools/piptools/_compat/pip_compat.py
Wrongly guessed js for toolkit/modules/BrowserUtils.jsm
Wrongly guessed indent-tabs-mode for toolkit/components/extensions/parent/ext-identity.js
Wrongly guessed idl for toolkit/components/remote/nsRemoteClient.h

I've filed #116, #117, #118. There might be others. I'll rerun the script after these have been fixed.

Improve language detection

As discussed on IRC, we could use some additional clues to decide the language of a file. E.g. the VIM mode.

rust-code-analysis panics when files contain bad chars

E.g. https://hg.mozilla.org/mozilla-central/raw-file/9b2a99adc05e53cd4010de512f50118594756650/extensions/java/xpcom/tests/testparams/TestParams.java, I see something like:

thread 'actix-rt:worker:0' panicked at 'called `Result::unwrap()` on an `Err` value: FromUtf8Error { bytes: [10, 112, 114, 105, 118, 97, 116, 101, 32, 115, 116, 97, 116, 105, 99, 32, 83, 116, 114, 105, 110, 103, 32, 117, 116, 102, 56, 83, 116, 114, 105, 110, 103, 32, 61, 32, 34, 78, 111, 110, 45, 65, 115, 99, 105, 105, 32, 49, 32, 98, 121, 116, 101, 32, 99, 104, 97, 114, 115, 58, 32, 142, 137, 138, 136, 140, 141, 44, 32, 50, 32, 98, 121, 116, 101, 32, 99, 104, 97, 114, 115, 58, 32, 92, 117, 49, 50, 51, 52, 32, 92, 117, 49, 50, 51, 53, 32, 92, 117, 49, 50, 51, 54, 34, 59, 10], error: Utf8Error { valid_up_to: 61, error_len: Some(1) } }', src/libcore/result.rs:1189:5
stack backtrace:
   0:     0x556a0684e39f - backtrace::backtrace::libunwind::trace::hd843da7ff1c5f29e
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/libunwind.rs:88
   1:     0x556a0684e39f - backtrace::backtrace::trace_unsynchronized::had390a3b5e3947d4
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.40/src/backtrace/mod.rs:66
   2:     0x556a0684e39f - std::sys_common::backtrace::_print_fmt::hf3539386bc544b27
                               at src/libstd/sys_common/backtrace.rs:84
   3:     0x556a0684e39f - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h929d1bf979a7bd14
                               at src/libstd/sys_common/backtrace.rs:61
   4:     0x556a0666843c - core::fmt::write::h41bac7029803ec62
                               at src/libcore/fmt/mod.rs:1025
   5:     0x556a0684d9c6 - std::io::Write::write_fmt::hd63968cca8037ffd
                               at src/libstd/io/mod.rs:1426
   6:     0x556a0684d63e - std::sys_common::backtrace::_print::h83e9eed42de74378
                               at src/libstd/sys_common/backtrace.rs:65
   7:     0x556a0684d63e - std::sys_common::backtrace::print::hb5610ce15b59e4ec
                               at src/libstd/sys_common/backtrace.rs:50
   8:     0x556a0684d63e - std::panicking::default_hook::{{closure}}::h50a557df0a3289c9
                               at src/libstd/panicking.rs:193
   9:     0x556a0684cde3 - std::panicking::default_hook::he2237295883c0e7e
                               at src/libstd/panicking.rs:210
  10:     0x556a0684cde3 - std::panicking::rust_panic_with_hook::hb938caf93064ba95
                               at src/libstd/panicking.rs:471
  11:     0x556a0684c95e - rust_begin_unwind
                               at src/libstd/panicking.rs:375
  12:     0x556a0666623d - core::panicking::panic_fmt::h6c8ca41996834739
                               at src/libcore/panicking.rs:82
  13:     0x556a06668a46 - core::result::unwrap_failed::h2ac91e4397fb385b
                               at src/libcore/result.rs:1189
  14:     0x556a067ef03a - rust_code_analysis::web::server::comment_removal_plain::h2760fc7d9cc8fe87
  15:     0x556a067eae12 - <actix_web::handler::ExtractResponse<T,S> as futures::future::Future>::poll::h768ffc7def3f005b
  16:     0x556a067eb579 - <futures::future::then::Then<A,B,F> as futures::future::Future>::poll::h30f2760edab97d09
  17:     0x556a0680c252 - <futures::future::either::Either<A,B> as futures::future::Future>::poll::h4b9c061b4efce956
  18:     0x556a0678d83e - actix_http::h1::dispatcher::InnerDispatcher<T,S,B,X,U>::poll_response::h78b1f3c8848169c2
  19:     0x556a0674930c - <actix_http::h1::dispatcher::Dispatcher<T,S,B,X,U> as futures::future::Future>::poll::h7cb22672cbba84bd
  20:     0x556a06746df6 - <actix_http::service::HttpServiceHandlerResponse<T,S,B,X,U> as futures::future::Future>::poll::ha7f8f849b5abf986
  21:     0x556a06746aa1 - <futures::future::then::Then<A,B,F> as futures::future::Future>::poll::hf0e0fa42178892c7
  22:     0x556a065c488b - actix_rt::runtime::Runtime::block_on::hd92adf7dd938b3ea
  23:     0x556a065c1e40 - std::sys_common::backtrace::__rust_begin_short_backtrace::h5b6c9aa610e83a4f
  24:     0x556a065c14a9 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h5696a194f43707bb
  25:     0x556a0685a3cf - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::h22e1ebc1e05b8f71
                               at /rustc/5c5c8eb864e56ce905742b8e97df5506bba6aeef/src/liballoc/boxed.rs:969
  26:     0x556a0685b8ec - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::hbafa6baf2fa444d3
                               at /rustc/5c5c8eb864e56ce905742b8e97df5506bba6aeef/src/liballoc/boxed.rs:969
  27:     0x556a0685b8ec - std::sys_common::thread::start_thread::hdaea57c7addb21e4
                               at src/libstd/sys_common/thread.rs:13
  28:     0x556a0685b8ec - std::sys::unix::thread::Thread::new::thread_start::hd637ac9354a8e6d4
                               at src/libstd/sys/unix/thread.rs:80
  29:     0x7f2cd7873fb7 - start_thread
  30:     0x7f2cd778b2cf - __clone
  31:                0x0 - <unknown>
Panic in Arbiter thread.

This is a regression, as it used to work in the previous version.

In the docs, generate subsections for "rust-code-analysis"

Currently, "rust-code-analysis" has no subsections, so you have to scroll down to see what the contents are.

For example, I was looking for the list of metrics, and my first (wrong) instinct was to click on "Metrics" in the table of contents.
If there was a "Supported Metrics" subsection for "rust-code-analysis", I would have directly gone there.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.