Skip to main content

Language Server Protocol implementation for Crystal Description Language

Project description

CDL Language Server

A Language Server Protocol (LSP) implementation for the Crystal Description Language (CDL).

Part of the Gemmology Project.

Features

  • Diagnostics: Real-time error detection and warnings
  • Completion: Context-aware autocomplete for systems, point groups, forms, and modifications
  • Hover: Documentation on hover for CDL elements
  • Go to Definition: Navigate to symbol definitions
  • Formatting: Automatic CDL formatting
  • Code Actions: Quick fixes for common errors
  • Document Symbols: Outline view of CDL documents
  • Signature Help: Parameter hints for modifications

Installation

pip install cdl-lsp

Dependencies

The package requires:

  • cdl-parser>=1.0.0 - CDL parsing library
  • pygls>=1.0.0 - Python language server framework
  • lsprotocol>=2023.0.0 - LSP type definitions

Usage

From Command Line

# Standard I/O mode (default)
cdl-lsp

# TCP mode
cdl-lsp --tcp --host 127.0.0.1 --port 2087

# With logging
cdl-lsp --log-file /tmp/cdl-lsp.log --log-level DEBUG

From Python

from cdl_lsp import create_server

server = create_server()
server.start_io()  # or server.start_tcp(host, port)

Editor Integration

VS Code

Install the CDL extension from the VS Code marketplace, or configure manually:

{
  "cdl.server.path": "cdl-lsp"
}

Neovim (nvim-lspconfig)

require('lspconfig').cdl_lsp.setup{
  cmd = {'cdl-lsp'},
  filetypes = {'cdl'},
}

Sublime Text (LSP)

Add to LSP settings:

{
  "clients": {
    "cdl": {
      "command": ["cdl-lsp"],
      "selector": "source.cdl"
    }
  }
}

CDL Syntax Overview

The Crystal Description Language describes crystal morphologies:

# Basic forms
cubic[m3m]:{111}                     # Octahedron
cubic[m3m]:{100}                     # Cube

# Combined forms
cubic[m3m]:{111}@1.0 + {100}@1.3     # Truncated octahedron

# Named forms
cubic[m3m]:octahedron                # Same as {111}

# Modifications
cubic[m3m]:{111}|elongate(c:1.5)     # Elongated
cubic[m3m]:{111}|twin(spinel)        # Twinned

# Different crystal systems
hexagonal[6/mmm]:{10-10}@1.0 + {0001}@0.5   # Hexagonal prism
trigonal[-3m]:{10-11}                       # Rhombohedron

API Reference

Constants

from cdl_lsp.constants import (
    CRYSTAL_SYSTEMS,      # Set of crystal system names
    POINT_GROUPS,         # Dict mapping system to point groups
    ALL_POINT_GROUPS,     # Set of all 32 point groups
    TWIN_LAWS,            # Set of twin law names
    NAMED_FORMS,          # Dict mapping form names to Miller indices
    MODIFICATIONS,        # Set of modification names
)

Server

The LSP server handles all features internally. Use the server module to start the language server:

from cdl_lsp import create_server, SERVER_NAME, SERVER_VERSION

server = create_server()
print(f"Running {SERVER_NAME} v{SERVER_VERSION}")
server.start_io()  # or server.start_tcp(host, port)

Development

Setup

git clone https://github.com/gemmology-dev/cdl-lsp
cd cdl-lsp
pip install -e ".[dev]"

Testing

pytest tests/ -v

Linting

ruff check src/
mypy src/

License

MIT License - see LICENSE for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gemmology_cdl_lsp-1.1.0.tar.gz (53.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gemmology_cdl_lsp-1.1.0-py3-none-any.whl (47.3 kB view details)

Uploaded Python 3

File details

Details for the file gemmology_cdl_lsp-1.1.0.tar.gz.

File metadata

  • Download URL: gemmology_cdl_lsp-1.1.0.tar.gz
  • Upload date:
  • Size: 53.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gemmology_cdl_lsp-1.1.0.tar.gz
Algorithm Hash digest
SHA256 8e8a1aab9ed7f45f027b7324d6a7d4fd7df17ba8b8cad51636bbacac5785844e
MD5 23fdd0bc4d7715007a33683a72d04816
BLAKE2b-256 e618c0307002e999fc2496aaa0e9d5db415aeb0ee38526b9c210556f109feef9

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_cdl_lsp-1.1.0.tar.gz:

Publisher: pypi-publish.yml on gemmology-dev/cdl-lsp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gemmology_cdl_lsp-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gemmology_cdl_lsp-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 52ef70f949d966c0dad7aa1b069ee6a73a56eacf6feaf9168b979c04fe5d8a1b
MD5 30edb6fff7069444d34306d7182bcfc9
BLAKE2b-256 49fb0e2bf92353c83a53f3208aba84a0353bec26252611973a3d94b6ca3989ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_cdl_lsp-1.1.0-py3-none-any.whl:

Publisher: pypi-publish.yml on gemmology-dev/cdl-lsp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page