oak_fsharp/language/
mod.rs

1use crate::kind::FSharpSyntaxKind;
2use oak_core::Language;
3
4/// F# 语言实现
5#[derive(Debug, Clone)]
6pub struct FSharpLanguage {
7    /// 是否启用 F# 4.0
8    pub fsharp_4_0: bool,
9    /// 是否启用 F# 4.1
10    pub fsharp_4_1: bool,
11    /// 是否启用 F# 4.5
12    pub fsharp_4_5: bool,
13    /// 是否启用 F# 5.0
14    pub fsharp_5_0: bool,
15    /// 是否启用 F# 6.0
16    pub fsharp_6_0: bool,
17    /// 是否启用 F# 7.0
18    pub fsharp_7_0: bool,
19    /// 是否启用计算表达
20    pub computation_expressions: bool,
21    /// 是否启用类型提供
22    pub type_providers: bool,
23    /// 是否启用异步工作
24    pub async_workflows: bool,
25    /// 是否启用查询表达    
26    pub query_expressions: bool,
27}
28
29impl Default for FSharpLanguage {
30    fn default() -> Self {
31        Self {
32            fsharp_4_0: true,
33            fsharp_4_1: true,
34            fsharp_4_5: true,
35            fsharp_5_0: true,
36            fsharp_6_0: true,
37            fsharp_7_0: true,
38            computation_expressions: true,
39            type_providers: true,
40            async_workflows: true,
41            query_expressions: true,
42        }
43    }
44}
45
46impl FSharpLanguage {
47    /// 创建新的 F# 语言配置
48    pub fn new() -> Self {
49        Self::default()
50    }
51
52    /// 启用所F#    pub
53    fn with_all_features(mut self) -> Self {
54        self.fsharp_4_0 = true;
55        self.fsharp_4_1 = true;
56        self.fsharp_4_5 = true;
57        self.fsharp_5_0 = true;
58        self.fsharp_6_0 = true;
59        self.fsharp_7_0 = true;
60        self.computation_expressions = true;
61        self.type_providers = true;
62        self.async_workflows = true;
63        self.query_expressions = true;
64        self
65    }
66
67    /// 设置 F# 版本   pub
68    fn with_version(mut self, major: u8, minor: u8) -> Self {
69        match (major, minor) {
70            (4, 0) => {
71                self.fsharp_4_0 = true;
72            }
73            (4, 1) => {
74                self.fsharp_4_0 = true;
75                self.fsharp_4_1 = true;
76            }
77            (4, 5) => {
78                self.fsharp_4_0 = true;
79                self.fsharp_4_1 = true;
80                self.fsharp_4_5 = true;
81            }
82            (5, 0) => {
83                self.fsharp_4_0 = true;
84                self.fsharp_4_1 = true;
85                self.fsharp_4_5 = true;
86                self.fsharp_5_0 = true;
87            }
88            (6, 0) => {
89                self.fsharp_4_0 = true;
90                self.fsharp_4_1 = true;
91                self.fsharp_4_5 = true;
92                self.fsharp_5_0 = true;
93                self.fsharp_6_0 = true;
94            }
95            (7, 0) => {
96                self.fsharp_4_0 = true;
97                self.fsharp_4_1 = true;
98                self.fsharp_4_5 = true;
99                self.fsharp_5_0 = true;
100                self.fsharp_6_0 = true;
101                self.fsharp_7_0 = true;
102            }
103            _ => {}
104        }
105        self
106    }
107
108    /// 启用计算表达    pub
109    fn with_computation_expressions(mut self, enabled: bool) -> Self {
110        self.computation_expressions = enabled;
111        self
112    }
113
114    /// 启用类型提供    pub
115    fn with_type_providers(mut self, enabled: bool) -> Self {
116        self.type_providers = enabled;
117        self
118    }
119
120    /// 启用异步工作    pub
121    fn with_async_workflows(mut self, enabled: bool) -> Self {
122        self.async_workflows = enabled;
123        self
124    }
125
126    /// 启用查询表达    pub
127    fn with_query_expressions(mut self, enabled: bool) -> Self {
128        self.query_expressions = enabled;
129        self
130    }
131}
132
133pub struct FSharpRoot;
134
135impl Language for FSharpLanguage {
136    type SyntaxKind = FSharpSyntaxKind;
137    type TypedRoot = FSharpRoot;
138}