Menu

Overview

Relevant source files

BSL Language Server is an implementation of the Language Server Protocol for the BSL language family, which includes 1C:Enterprise 8 configuration language and OneScript. It provides IDE-independent language intelligence features including diagnostics, code formatting, navigation, symbol information, and refactoring capabilities.

This document provides a high-level overview of the BSL Language Server system, its capabilities, operating modes, and architecture. For detailed information about specific subsystems, see:

Sources: docs/index.md1-32 docs/en/index.md1-32 README.md1-32 build.gradle.kts1-50

What is BSL Language Server?

BSL Language Server is a Java-based implementation of the Language Server Protocol for the BSL (Built-in Scripting Language) family, which includes:

  • 1C:Enterprise 8 configuration language (.bsl files)
  • OneScript scripting language (.os files)

The server provides IDE-independent language intelligence by analyzing BSL source code and offering diagnostics, formatting, navigation, and refactoring capabilities. It operates as a standalone console application (com.github._1c_syntax.bsl.languageserver.BSLLSPLauncher) that can run in multiple modes:

ModeEntry PointTransportPrimary Use Case
LSP ServerBSLLanguageServerstdio or WebSocketIDE/editor integration via LSP
AnalyzerAnalyzeCommandCLI batchCI/CD pipeline integration, batch code analysis
FormatterFormatCommandCLI batchAutomated code formatting in build scripts

The server integrates with VS Code, Sublime Text, 1C:EDT, Phoenix BSL, and SonarQube through standard LSP protocol or dedicated plugins.

Sources: docs/index.md15-53 docs/en/index.md15-53 build.gradle.kts166-178 src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java42-272

Core Capabilities

The following table summarizes the main features provided by BSL Language Server:

Feature CategoryCapabilitiesConfiguration
Diagnostics100+ diagnostic rules covering code smells, errors, vulnerabilities, security hotspotsPer-diagnostic parameters, modes (ON/OFF/EXCEPT/ONLY/ALL)
FormattingDocument formatting, range formattingConfigurable via settings
NavigationGo to definition, find references, document symbols, workspace symbols, call hierarchyBuilt-in
Code IntelligenceHover documentation, code lenses (complexity metrics), inlay hints (parameter names)Toggle via configuration
RefactoringSymbol renaming, code actions, quick fixesBased on diagnostic context
AnalysisCognitive complexity, cyclomatic complexity, method metrics, code foldingThreshold configuration

All features can be enabled or disabled through the configuration file (.bsl-language-server.json). See Configuration System for details.

Sources: docs/index.md35-116 docs/en/index.md35-116 docs/diagnostics/index.md1-9 docs/en/diagnostics/index.md1-9

Operating Modes and Entry Points

Command Line Interface Architecture

BSL Language Server uses Picocli for command-line parsing and Spring Boot for dependency injection. All modes are accessed through BSLLSPLauncher.main():

Command Parameters

CommandPrimary OptionsConfiguration FileOutput
lsp (default)-c, --configuration.bsl-language-server.jsonLSP messages via stdio
websocket--server.port=8025
--app.websocket.lsp-path=/lsp
.bsl-language-server.jsonLSP messages via WebSocket
analyze-s, --srcDir
-r, --reporter (console|json|junit|sarif|tslint)
-o, --outputDir
.bsl-language-server.jsonAnalysis reports
format-s, --src (file or directory).bsl-language-server.jsonModified source files
versionNoneN/AVersion string to stdout

Sources: docs/index.md118-243 docs/en/index.md118-243 src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLSPLauncherTest.java42-272 build.gradle.kts18-27 build.gradle.kts70-82

Core Architecture: From Source File to Diagnostics

High-Level Component Structure

Data Flow: .bsl File to Diagnostic Output

Architectural Patterns

PatternImplementationBenefit
Lazy InitializationDocumentContext uses Lazy<T> for tokenizer, symbol tree, diagnosticsExpensive operations only run on demand; memory efficient
Two-Level StateServerContext (workspace) + DocumentContext (per-file)Separation of concerns; supports incremental updates
Spring DI@Component scan for diagnostics, providers injected via constructorExtensible plugin architecture; testable
Provider PatternHoverProvider, DefinitionProvider, etc. implement feature-specific logicLSP operations cleanly separated; reusable
Immutable ConfigurationLanguageServerConfiguration reloaded on workspace/didChangeConfigurationThread-safe; predictable behavior

Sources: build.gradle.kts18-95 build.gradle.kts66-150 Diagrams 1, 2, 3, and 6 from high-level architecture, src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java49-100

Technology Stack

BSL Language Server is built on the following core technologies:

Runtime & Framework

TechnologyVersionPurpose
Java17+Runtime platform (tested on 17, 21, 23)
Spring Boot3.5.6Application framework, dependency injection
picocli4.7.7Command-line interface framework

Language Server Protocol

TechnologyVersionPurpose
LSP4J0.24.0LSP protocol implementation
LSP4J WebSocket0.24.0WebSocket transport for LSP

BSL Language Processing

TechnologyVersionPurpose
bsl-parser0.26.1ANTLR-based BSL grammar and parser
bsl-parser-core0.3.1Core parsing utilities
mdclasses0.15.11C metadata parsing
bsl-common-library0.8.1BSL language utilities
supportconf0.14.3Support configuration handling

Analysis & Quality

TechnologyVersionPurpose
JLanguageTool6.5Spell checking (English, Russian)
JGraphT1.5.2Graph algorithms for call hierarchies
AspectJ1.9.22.1AOP for cross-cutting concerns

Build & Testing

TechnologyVersionPurpose
Gradle8.14.3Build automation
JUnit 5(via Spring Boot)Testing framework
JMockit1.49Mocking framework
Jacoco(via plugin)Code coverage
SonarQube(via plugin)Code quality analysis

Sources: build.gradle.kts6-149 gradle/wrapper/gradle-wrapper.properties1-8 docs/systemRequirements.md1-20 docs/en/systemRequirements.md1-20

Configuration System

BSL Language Server uses a JSON-based configuration file (.bsl-language-server.json) validated against JSON schemas. Configuration controls:

  • Language: Message locale (Russian/English)
  • Diagnostics: Enable/disable rules, set parameters, choose modes
  • Features: Code lenses, inlay hints, diagnostic links, code actions
  • Formatting: Code style parameters
  • Trace Logging: Debug output configuration

The configuration system supports:

For detailed configuration options, see Configuration System.

Sources: src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/schema.json1-50 src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json1-100 docs/index.md245-249

Diagnostic System Overview

150+ Code Quality Rules

The diagnostic system implements over 150 configurable rules covering code smells, errors, vulnerabilities, and security issues. Each diagnostic is a Spring-managed @Component implementing the BSLDiagnostic interface.

Diagnostic Execution Flow

Diagnostic Distribution by Category

TypeCountSeverity RangeExample Diagnostic Keys
CODE_SMELL~100Info, Minor, MajorCognitiveComplexity, EmptyCodeBlock, MissingSpace
ERROR~30Critical, BlockerParseError, MissedRequiredParameter, FunctionShouldHaveReturn
VULNERABILITY~15Critical, BlockerExecuteExternalCode, DisableSafeMode, FileSystemAccess
SECURITY_HOTSPOT~6MajorIsInRoleMethod, PrivilegedModuleMethodCall

Diagnostic Metadata and Localization

Each diagnostic class is annotated with @DiagnosticMetadata and has corresponding resource files:

src/main/java/.../diagnostics/MissingTempStorageDeletionDiagnostic.java src/main/resources/.../diagnostics/MissingTempStorageDeletionDiagnostic_en.properties src/main/resources/.../diagnostics/MissingTempStorageDeletionDiagnostic_ru.properties docs/diagnostics/MissingTempStorageDeletion.md (Russian) docs/en/diagnostics/MissingTempStorageDeletion.md (English) 

The DiagnosticInfo class aggregates metadata, localized messages, and parameter schemas for each diagnostic. Configuration parameters are defined in src/main/resources/com/github/_1c_syntax/bsl/languageserver/configuration/parameters-schema.json1-100

For detailed diagnostic system architecture, see Diagnostic System.

Sources: docs/diagnostics/index.md1-9 docs/en/diagnostics/index.md1-9 src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic.java44-78 src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/SmokyTest.java56-155 src/main/resources/com/github/_1c_syntax/bsl/languageserver/diagnostics/MissingTempStorageDeletionDiagnostic_en.properties1-3 Diagram 4 from high-level architecture

Build and Distribution

Build System Overview

BSL Language Server uses Gradle 8.14.3 with multiple plugins for compilation, testing, quality assurance, and packaging. The main entry point for the build is build.gradle.kts1-416

Gradle Plugin Stack

PluginPurposeKey Configuration
java-libraryCore Java compilationJava 17 source/target compatibility
org.springframework.boot (3.5.6)Executable JAR packagingbootJar task creates self-contained JAR
io.freefair.lombokAnnotation processingReduces boilerplate code
io.freefair.aspectj.post-compile-weavingAOP supportCross-cutting concerns (logging, tracing)
jacocoCode coverageXML reports for SonarCloud
org.jreleaserMaven Central publishingAutomatic deployment
me.qoomon.git-versioningVersion from Git tagsv0.22.00.22.0, develop → 0.23.0.x-SNAPSHOT
io.github.1c-syntax.bslls-dev-toolsDiagnostic doc generationAuto-generates Markdown from @DiagnosticMetadata

Artifact Distribution

Artifact TypeTaskOutput LocationDistribution Channel
Standard JARjarbuild/libs/bsl-language-server-{version}.jarMaven Central
Executable JARbootJarbuild/libs/bsl-language-server-{version}-exec.jarMaven Central, GitHub Releases
Sources JARsourcesJarbuild/libs/bsl-language-server-{version}-sources.jarMaven Central
Javadoc JARjavadocJarbuild/libs/bsl-language-server-{version}-javadoc.jarMaven Central
Platform packagesjpackage (via GitHub Actions)Native installers (Windows .zip, Linux .tar.gz, macOS .app)GitHub Releases

Version Management

The build.gradle.kts36-58 configures automatic versioning:

  • Tagged releases: git tag v0.22.0 → version 0.22.0
  • Develop branch: 0.{minor+1}.0.{distance}-SNAPSHOT (e.g., 0.23.0.47-SNAPSHOT)
  • Feature branches: {branch}-{shortCommit} (e.g., feature-123-a1b2c3d)

Continuous Integration

GitHub Actions workflows (.github/workflows/) handle:

  • Multi-platform testing (Ubuntu, Windows, macOS)
  • Multi-JDK testing (Java 17, 21, 23)
  • SonarCloud quality gate
  • CodeQL security analysis
  • Performance benchmarking
  • Automatic dependency updates via Dependabot

For detailed build configuration, see Build and Development.

Sources: build.gradle.kts1-58 build.gradle.kts151-178 build.gradle.kts298-406 gradle/wrapper/gradle-wrapper.properties1-8 .github/dependabot.yml1-23 Diagram 5 from high-level architecture

LSP Protocol Support

BSL Language Server implements a comprehensive subset of the LSP specification:

LSP OperationStatusNotes
Lifecycle
initializeCapability negotiation
shutdown / exitClean shutdown
Text Synchronization
didOpen / didChange / didClose / didSaveFull sync mode
Language Features
publishDiagnostics100+ diagnostics, tag support
hoverMethod documentation
definitionGo to definition
referencesFind all references
documentSymbolOutline view
codeActionQuick fixes
codeLensComplexity metrics
formatting / rangeFormattingCode formatting
rename / prepareRenameSymbol renaming
foldingRangeCode folding
callHierarchyCall graph
inlayHintParameter names
documentLinkDiagnostic documentation links
documentColor / colorPresentationColor preview and conversion
Workspace
symbolWorkspace-wide symbol search
executeCommandCustom commands
didChangeConfigurationRuntime configuration updates

Unsupported operations include: completion, signatureHelp, semanticTokens, onTypeFormatting.

Sources: docs/index.md54-116 docs/en/index.md54-116 src/test/java/com/github/_1c_syntax/bsl/languageserver/BSLLanguageServerTest.java1-100

Integration Points

BSL Language Server integrates with various development tools:

IDE/Editor Integrations (via LSP)

  • VS Code: vsc-language-1c-bsl extension
  • Sublime Text: LSP plugin
  • Phoenix BSL: 1C Designer plugin
  • 1C:EDT: Direct integration (non-LSP)

Quality Platforms

Communication Protocols

  • stdio: Default LSP transport for local processes
  • WebSocket: ws://localhost:8025/lsp for remote/browser clients

Sources: docs/index.md1-32 docs/en/index.md1-32 docs/faq.md24-38 docs/en/faq.md24-38

System Requirements

Runtime Environment

ComponentRequirementNotes
JVMJava 17+Tested on OpenJDK 17, 21, 23; built with JDK 23 for releases
OSWindows 7+, Linux (Ubuntu/CentOS 6+), macOSPlatform-specific installers provided
Memory512MB minimum, 4GB+ recommended for large projectsUse -Xmx4g flag for batch analysis
Disk Space~100MB for application, additional space for project cacheTemporary storage in system temp directory

Client Requirements (for LSP mode)

  • LSP-compatible editor or IDE
  • Support for stdio or WebSocket transport
  • UTF-8 text encoding support

Sources: docs/systemRequirements.md1-20 docs/en/systemRequirements.md1-20 build.gradle.kts152-157 docs/index.md181-185 docs/en/index.md181-185

Documentation Resources

Additional documentation is available at:

For contributing guidelines, see the Contributing section in the main documentation.

Sources: README.md1-32 docs/index.md17-28 docs/en/index.md17-29 docs/faq.md1-38 docs/en/faq.md1-38