cqlls (CQL Language Server)
The Best Open Source language server for CQL (Cassandra Query Language) _
IDE Integrations
Installation
Config
To configure cqlls you can add .cqlls file in the project root
db {
type: "datastax_hcd|scylla|dynamo"
preferred_dc: "us-east-1"
known_nodes: {
"127.0.0.1:9042",
"127.0.0.1:9043"
}
tls: "none|tls|mtls"
ca_cert: "/path/to/ca_cert"
user: "cassandra"
pswd: "cassandra"
}
fmt {
type_padding: 0-255
indent: 0-255
}
features {
context_aware_completions: true|false
diagnostics: true|false
}
debug {
logging: true|false
}
[!TIP] All parts of the config are independent from each other, so if, for example, you only want to configure
formatting settingsanddb url, you can do something like this:db { known_nodes: { "172.0.0.2:9042" } } fmt { indent: 2 }
If no config file was provided, server will default to the following
db {
type: "scylla"
preferred_dc: ""
known_nodes: {
"127.0.0.1:9042"
}
tls: "none"
ca_cert: ""
user: "cassandra"
pswd: "cassandra"
}
fmt {
type_padding: 8
indent: 4
}
features {
context_aware_completions: true
diagnostics: false
}
debug {
logging: false
}
db
Just configures your database connection.
fmt
Indent vs padding
-- Inside create table
CREATE TABLE IF NOT EXISTS users (
/*Indent*/ id /*Padding*/ uuid,
/*Indent*/ display_name /*Padding*/ text,
);
-- Inside insert
INSERT INTO users (
/*Indent*/ user_id,
/*Indent*/ username,
/*Indent*/ contact,
/*Indent*/ addresses,
/*Indent*/ tags,
/*Indent*/ preferences,
/*Indent*/ last_login,
/*Indent*/ created_at
)
VALUES (
/*Indent*/ uuid(),
/*Indent*/ 'bob_builder',
/*Indent*/ {
/*Indent*/ /*Indent*/ email: 'bob@example.com',
/*Indent*/ /*Indent*/ phone: '+1-555-0202',
/*Indent*/ /*Indent*/ preferred_time: {
/*Indent*/ /*Indent*/ /*Indent*/ 'morning'
/*Indent*/ /*Indent*/ }
/*Indent*/ },
/*Indent*/ {
/*Indent*/ /*Indent*/ 'home': {
/*Indent*/ /*Indent*/ /*Indent*/ street: '789 Oak Ave',
/*Indent*/ /*Indent*/ /*Indent*/ city: 'Austin',
/*Indent*/ /*Indent*/ /*Indent*/ zip_code: '73301',
/*Indent*/ /*Indent*/ /*Indent*/ country: 'USA'
/*Indent*/ /*Indent*/ }
/*Indent*/ },
/*Indent*/ {
/*Indent*/ /*Indent*/ 'verified',
/*Indent*/ /*Indent*/ 'beta-tester'
/*Indent*/ },
/*Indent*/ {
/*Indent*/ /*Indent*/ 'theme': 'light',
/*Indent*/ /*Indent*/ 'language': 'en',
/*Indent*/ /*Indent*/ 'notifications': 'disabled'
/*Indent*/ },
/*Indent*/ toTimestamp(now()),
/*Indent*/ toTimestamp(now())
);
Padding is calculated in the following way for each field:
curr_field_padding = padding + max_field_len - curr_field_len;
-- Assuming padding is set to 8, max_field_len = 12 (display_name)
CREATE TABLE IF NOT EXISTS users (
/*Indent*/ id /* 8 + 12 - 2 = 18 */ uuid,
/*Indent*/ display_name /* 8 + 12 - 12 = 8 */ text,
);
features
Used to enable/disable a specific feature.
Currently cqlls has 2 features which are
- context_aware_completions
- When enabled,
cqllswill attempt to query the database, and provide a context aware completions, such as table names, keyspaces, table fields etc.
- When enabled,
- diagnostics
- When enabled, shows diagnostics.
debug
Enable/Disable logging.
Log file can be found at:
- MacOS:
~/Library/Application\ Support/cqlls/cqlls.log - Linux:
~/.local/share/cqlls/cqlls.log
[!TIP] Diagnostics are currently available as an experimental feature, and aren't stable yet _