analyzer-lsp

module
v0.3.0-alpha.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 10, 2023 License: Apache-2.0

README

Analyzer Rule Engine

In this project, we are writing a rule engine that can use pluggable providers for rules to make a consistent way to execute rules for Konveyor.

One of the primary drivers for this repository is adding providers for specific languages using the Language Server Protocol. Today these providers are in tree, but we will be moving them out in the future.

Quick Demo

If you would like to run a quick demo we have a Dockerfile that has all the dependencies.

To run this demo build the containers:

$ podman build -f Dockerfile -t quay.io/konveyor/analyzer-lsp
$ podman build -f demo.Dockerfile -t test-analyzer-engine

This will build the engine, and include the current set of rules and examples in the container to be used.

To run the rules (rule-example.yaml) against the examples, and save the output to the demo-output.yaml file:

$ podman run -v $(pwd)/demo-output.yaml:/analyzer-lsp/output.yaml:Z test-analyzer-engine

Running from source code

To run the engine from source code, you need to:

  • Configure providers. By default, providers are configured in provider_settings.json. See Providers for instructions on configuring providers.
  • Configure rules. By default, rules are present in rules_example.yaml. See Rules for details on rule format.

Once the providers are configured, you can run:

go run cmd/analyzer/main.go

CLI Options:

  --analysis-mode string       Can be full or source-only to tell the providers what to analyze. If full, source code and all dependencies will be analyzed, if source-only, only the source code will be. This can be given on a per provider basis, but this flag will override those.
  --provider-settings string   path to the provider settings (default "provider_settings.json")
  --rules stringArray          filename or directory containing rule files (default [rule-example.yaml])
  --output-file string         filepath to to store rule violations (default "output.yaml")
  --label-selector string      an expression to select rules based on labels
  --enable-jaeger              enable tracer exports to jaeger endpoint
  --error-on-violation         exit with 3 if any violation are found will also print violations to console
  --jaeger-endpoint string     jaeger endpoint to collect tracing data (default "http://localhost:14268/api/traces")
  --no-dependency-rules        Disable dependency analysis rules
  --limit-incidents int        Set this to the limit incidents that a given rule can give. zero means no limit (default 1500)
  --limit-code-snips int       limit the number code snippets that are retrieved for a file while evaluating a rule, 0 means no limit (default 20)
  --verbose int                level for logging output (default 9)

Code Base Starting Point

Using the LSP/Protocal from ACME https://github.com/fhs/acme-lsp and stripping out anything related to serving, proxy or anything. Just keeping the types for communication

Using JSONRPC2 from google.org/x/tools/internal. Copied and removed anything to do with serving.

Code of Conduct

Refer to Konveyor's Code of Conduct page

Directories

Path Synopsis
cmd
dep
examples
golang Module
Package jsonrpc2 is a minimal implementation of the JSON RPC 2 spec.
Package jsonrpc2 is a minimal implementation of the JSON RPC 2 spec.
lsp
protocol
Package protocol contains the structs that map directly to the wire format of the "Language Server Protocol".
Package protocol contains the structs that map directly to the wire format of the "Language Server Protocol".
output
lib

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL