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.0.0.tar.gz (40.8 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.0.0-py3-none-any.whl (42.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gemmology_cdl_lsp-1.0.0.tar.gz
  • Upload date:
  • Size: 40.8 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.0.0.tar.gz
Algorithm Hash digest
SHA256 f2f33ad57f64aff76e5db3e227555923b2601954640355eedcf133496196e1bb
MD5 6854c263e058586b3339e91ca892ce09
BLAKE2b-256 787e906809eac67aac60c0545a39e6210d3eb45f7e445ca72f64559c3ced496c

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_cdl_lsp-1.0.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.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gemmology_cdl_lsp-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 222f75b543ed1f79876f32fc93185936584f24cc1bff216a71240637722be947
MD5 42ee74b3044d2213acc229f05538e18f
BLAKE2b-256 463078e11c89d6c9dde9d914394238f91544f3247f8aa0736fa2348b01da6801

See more details on using hashes here.

Provenance

The following attestation bundles were made for gemmology_cdl_lsp-1.0.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