oak_fsharp/language/
mod.rs1use crate::kind::FSharpSyntaxKind;
2use oak_core::Language;
3
4#[derive(Debug, Clone)]
6pub struct FSharpLanguage {
7 pub fsharp_4_0: bool,
9 pub fsharp_4_1: bool,
11 pub fsharp_4_5: bool,
13 pub fsharp_5_0: bool,
15 pub fsharp_6_0: bool,
17 pub fsharp_7_0: bool,
19 pub computation_expressions: bool,
21 pub type_providers: bool,
23 pub async_workflows: bool,
25 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 pub fn new() -> Self {
49 Self::default()
50 }
51
52 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 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 fn with_computation_expressions(mut self, enabled: bool) -> Self {
110 self.computation_expressions = enabled;
111 self
112 }
113
114 fn with_type_providers(mut self, enabled: bool) -> Self {
116 self.type_providers = enabled;
117 self
118 }
119
120 fn with_async_workflows(mut self, enabled: bool) -> Self {
122 self.async_workflows = enabled;
123 self
124 }
125
126 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}