Skip to main content

oak_tcl/language/
mod.rs

1use crate::ast::TclRoot;
2use oak_core::{Language, LanguageCategory};
3use serde::{Deserialize, Serialize};
4
5/// Tcl 语言配置
6#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub struct TclLanguage {
8    /// Tcl 版本
9    pub version: TclVersion,
10    /// 是否启用扩展语法
11    pub extensions: bool,
12}
13
14impl Default for TclLanguage {
15    fn default() -> Self {
16        Self::standard()
17    }
18}
19
20impl TclLanguage {
21    /// 创建新的 Tcl 语言实例
22    pub fn new() -> Self {
23        Self::default()
24    }
25}
26
27/// Tcl 版本
28#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
29pub enum TclVersion {
30    /// Tcl 8.0
31    Tcl80,
32    /// Tcl 8.1
33    Tcl81,
34    /// Tcl 8.2
35    Tcl82,
36    /// Tcl 8.3
37    Tcl83,
38    /// Tcl 8.4
39    Tcl84,
40    /// Tcl 8.5
41    Tcl85,
42    /// Tcl 8.6
43    Tcl86,
44    /// Tcl 8.7
45    Tcl87,
46    /// Tcl 9.0
47    Tcl90,
48}
49
50impl TclLanguage {
51    /// 创建标准 Tcl 8.6 配置
52    pub fn standard() -> Self {
53        Self { version: TclVersion::Tcl86, extensions: false }
54    }
55
56    /// 创建 Tcl 8.5 配置
57    pub fn tcl85() -> Self {
58        Self { version: TclVersion::Tcl85, extensions: false }
59    }
60
61    /// 创建 Tcl 8.6 配置
62    pub fn tcl86() -> Self {
63        Self { version: TclVersion::Tcl86, extensions: false }
64    }
65
66    /// 创建 Tcl 9.0 配置
67    pub fn tcl90() -> Self {
68        Self { version: TclVersion::Tcl90, extensions: true }
69    }
70
71    /// 创建支持扩展语法的 Tcl 配置
72    pub fn with_extensions() -> Self {
73        Self { version: TclVersion::Tcl86, extensions: true }
74    }
75}
76
77impl Language for TclLanguage {
78    const NAME: &'static str = "tcl";
79    const CATEGORY: LanguageCategory = LanguageCategory::Programming;
80
81    type TokenType = crate::kind::TclSyntaxKind;
82    type ElementType = crate::kind::TclSyntaxKind;
83    type TypedRoot = TclRoot;
84}