#![doc = include_str!("readme.md")]
use oak_core::{Language, LanguageCategory};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct FSharpLanguage {
pub fsharp_4_0: bool,
pub fsharp_4_1: bool,
pub fsharp_4_5: bool,
pub fsharp_5_0: bool,
pub fsharp_6_0: bool,
pub fsharp_7_0: bool,
pub computation_expressions: bool,
pub type_providers: bool,
pub async_workflows: bool,
pub query_expressions: bool,
}
impl Default for FSharpLanguage {
fn default() -> Self {
Self { fsharp_4_0: true, fsharp_4_1: true, fsharp_4_5: true, fsharp_5_0: true, fsharp_6_0: true, fsharp_7_0: true, computation_expressions: true, type_providers: true, async_workflows: true, query_expressions: true }
}
}
impl FSharpLanguage {
pub fn new() -> Self {
Self::default()
}
pub fn with_all_features(mut self) -> Self {
self.fsharp_4_0 = true;
self.fsharp_4_1 = true;
self.fsharp_4_5 = true;
self.fsharp_5_0 = true;
self.fsharp_6_0 = true;
self.fsharp_7_0 = true;
self.computation_expressions = true;
self.type_providers = true;
self.async_workflows = true;
self.query_expressions = true;
self
}
pub fn with_version(mut self, major: u8, minor: u8) -> Self {
match (major, minor) {
(4, 0) => self.fsharp_4_0 = true,
(4, 1) => {
self.fsharp_4_0 = true;
self.fsharp_4_1 = true
}
(4, 5) => {
self.fsharp_4_0 = true;
self.fsharp_4_1 = true;
self.fsharp_4_5 = true
}
(5, 0) => {
self.fsharp_4_0 = true;
self.fsharp_4_1 = true;
self.fsharp_4_5 = true;
self.fsharp_5_0 = true
}
(6, 0) => {
self.fsharp_4_0 = true;
self.fsharp_4_1 = true;
self.fsharp_4_5 = true;
self.fsharp_5_0 = true;
self.fsharp_6_0 = true
}
(7, 0) => {
self.fsharp_4_0 = true;
self.fsharp_4_1 = true;
self.fsharp_4_5 = true;
self.fsharp_5_0 = true;
self.fsharp_6_0 = true;
self.fsharp_7_0 = true
}
_ => {}
}
self
}
pub fn with_computation_expressions(mut self, enabled: bool) -> Self {
self.computation_expressions = enabled;
self
}
pub fn with_type_providers(mut self, enabled: bool) -> Self {
self.type_providers = enabled;
self
}
pub fn with_async_workflows(mut self, enabled: bool) -> Self {
self.async_workflows = enabled;
self
}
pub fn with_query_expressions(mut self, enabled: bool) -> Self {
self.query_expressions = enabled;
self
}
}
impl Language for FSharpLanguage {
const NAME: &'static str = "fsharp";
const CATEGORY: LanguageCategory = LanguageCategory::Programming;
type TokenType = crate::lexer::token_type::FSharpTokenType;
type ElementType = crate::parser::element_type::FSharpElementType;
type TypedRoot = crate::ast::FSharpRoot;
}