Skip to content

Commit

Permalink
feat: add support for fnlfmt (#255)
Browse files Browse the repository at this point in the history
  • Loading branch information
hougesen authored Jun 3, 2024
1 parent eff8014 commit 5e2f4ba
Show file tree
Hide file tree
Showing 8 changed files with 144 additions and 10 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ mdsf init
| Erb | `erb-formatter` |
| Erlang | `efmt`, `erlfmt` |
| FSharp | `fantomas` |
| Fennel | `fnlfmt` |
| Fortran | `findent`, `fprettify` |
| Gleam | `gleam_format` |
| Go | `crlfmt`, `gci`, `gofmt`, `gofumpt`, `goimports`, `goimports-reviser`, `golines` |
Expand Down
4 changes: 4 additions & 0 deletions mdsf.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@
"enabled": true,
"formatter": [["erlfmt", "efmt"]]
},
"fennel": {
"enabled": true,
"formatter": "fnlfmt"
},
"fortran": {
"enabled": true,
"formatter": [["fprettify", "findent"]]
Expand Down
41 changes: 41 additions & 0 deletions schemas/v0.0.7/mdsf.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,17 @@
}
]
},
"fennel": {
"default": {
"enabled": true,
"formatter": "fnlfmt"
},
"allOf": [
{
"$ref": "#/definitions/Lang_for_Fennel"
}
]
},
"format_finished_document": {
"description": "Format the processed document with the selected markdown formatter.",
"default": false,
Expand Down Expand Up @@ -797,6 +808,10 @@
"type": "string",
"enum": ["fantomas"]
},
"Fennel": {
"type": "string",
"enum": ["fnlfmt"]
},
"Fortran": {
"type": "string",
"enum": ["fprettify", "findent"]
Expand Down Expand Up @@ -1107,6 +1122,19 @@
},
"additionalProperties": false
},
"Lang_for_Fennel": {
"type": "object",
"properties": {
"enabled": {
"default": true,
"type": "boolean"
},
"formatter": {
"$ref": "#/definitions/MdsfFormatter_for_Fennel"
}
},
"additionalProperties": false
},
"Lang_for_Fortran": {
"type": "object",
"properties": {
Expand Down Expand Up @@ -1941,6 +1969,19 @@
}
]
},
"MdsfFormatter_for_Fennel": {
"anyOf": [
{
"$ref": "#/definitions/Fennel"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/MdsfFormatter_for_Fennel"
}
}
]
},
"MdsfFormatter_for_Fortran": {
"anyOf": [
{
Expand Down
24 changes: 14 additions & 10 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ use crate::{
languages::{
assembly::Assembly, bazel::Bazel, bicep::Bicep, blade::Blade, c::C, cabal::Cabal,
clojure::Clojure, cpp::Cpp, crystal::Crystal, csharp::CSharp, css::Css, d::D, dart::Dart,
elixir::Elixir, elm::Elm, erb::Erb, erlang::Erlang, fortran::Fortran, fsharp::FSharp,
gleam::Gleam, go::Go, graphql::GraphQL, groovy::Groovy, handlebars::Handlebars,
haskell::Haskell, hcl::Hcl, html::Html, java::Java, javascript::JavaScript, json::Json,
julia::Julia, just::Just, kcl::Kcl, kotlin::Kotlin, lua::Lua, markdown::Markdown,
mustache::Mustache, nim::Nim, nix::Nix, nunjucks::Nunjucks, objective_c::ObjectiveC,
ocaml::OCaml, perl::Perl, protobuf::Protobuf, puppet::Puppet, purescript::PureScript,
python::Python, rescript::ReScript, restructuredtext::ReStructuredText, roc::Roc,
ruby::Ruby, rust::Rust, scala::Scala, shell::Shell, solidity::Solidity, sql::Sql,
swift::Swift, toml::Toml, typescript::TypeScript, vue::Vue, xml::Xml, yaml::Yaml, zig::Zig,
Lang,
elixir::Elixir, elm::Elm, erb::Erb, erlang::Erlang, fennel::Fennel, fortran::Fortran,
fsharp::FSharp, gleam::Gleam, go::Go, graphql::GraphQL, groovy::Groovy,
handlebars::Handlebars, haskell::Haskell, hcl::Hcl, html::Html, java::Java,
javascript::JavaScript, json::Json, julia::Julia, just::Just, kcl::Kcl, kotlin::Kotlin,
lua::Lua, markdown::Markdown, mustache::Mustache, nim::Nim, nix::Nix, nunjucks::Nunjucks,
objective_c::ObjectiveC, ocaml::OCaml, perl::Perl, protobuf::Protobuf, puppet::Puppet,
purescript::PureScript, python::Python, rescript::ReScript,
restructuredtext::ReStructuredText, roc::Roc, ruby::Ruby, rust::Rust, scala::Scala,
shell::Shell, solidity::Solidity, sql::Sql, swift::Swift, toml::Toml,
typescript::TypeScript, vue::Vue, xml::Xml, yaml::Yaml, zig::Zig, Lang,
},
runners::JavaScriptRuntime,
terminal::print_config_not_found,
Expand Down Expand Up @@ -95,6 +95,9 @@ pub struct MdsfConfig {
#[serde(default)]
pub erlang: Lang<Erlang>,

#[serde(default)]
pub fennel: Lang<Fennel>,

#[serde(default)]
pub fortran: Lang<Fortran>,

Expand Down Expand Up @@ -259,6 +262,7 @@ impl Default for MdsfConfig {
elm: Lang::<Elm>::default(),
erb: Lang::<Erb>::default(),
erlang: Lang::<Erlang>::default(),
fennel: Lang::<Fennel>::default(),
fortran: Lang::<Fortran>::default(),
fsharp: Lang::<FSharp>::default(),
gleam: Lang::<Gleam>::default(),
Expand Down
13 changes: 13 additions & 0 deletions src/formatters/fnlfmt.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
use super::execute_command;
use crate::error::MdsfError;

#[inline]
pub fn format_using_fnlfmt(
snippet_path: &std::path::Path,
) -> Result<(bool, Option<String>), MdsfError> {
let mut cmd = std::process::Command::new("fnlfmt");

cmd.arg(snippet_path);

execute_command(&mut cmd, snippet_path)
}
2 changes: 2 additions & 0 deletions src/formatters/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ pub mod erlfmt;
pub mod fantomas;
pub mod findent;
pub mod fish_indent;
pub mod fnlfmt;
pub mod forge_fmt;
pub mod fourmolu;
pub mod fprettify;
Expand Down Expand Up @@ -208,6 +209,7 @@ pub fn format_snippet(config: &MdsfConfig, info: &LineInfo, code: &str) -> Strin
Language::Elm => config.elm.format(snippet_path, info),
Language::Erb => config.erb.format(snippet_path, info),
Language::Erlang => config.erlang.format(snippet_path, info),
Language::Fennel => config.fennel.format(snippet_path, info),
Language::FSharp => config.fsharp.format(snippet_path, info),
Language::Fortran => config.fortran.format(snippet_path, info),
Language::Gleam => config.gleam.format(snippet_path, info),
Expand Down
64 changes: 64 additions & 0 deletions src/languages/fennel.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
use schemars::JsonSchema;

use super::{Lang, LanguageFormatter};
use crate::{
error::MdsfError,
formatters::{fnlfmt::format_using_fnlfmt, MdsfFormatter},
};

#[derive(Default, serde::Serialize, serde::Deserialize, JsonSchema)]
#[cfg_attr(test, derive(Debug, PartialEq, Eq))]
pub enum Fennel {
#[default]
#[serde(rename = "fnlfmt")]
Fnlfmt,
}

impl Default for Lang<Fennel> {
#[inline]
fn default() -> Self {
Self {
enabled: true,
formatter: MdsfFormatter::<Fennel>::default(),
}
}
}

impl Default for MdsfFormatter<Fennel> {
#[inline]
fn default() -> Self {
Self::Single(Fennel::Fnlfmt)
}
}

impl LanguageFormatter for Fennel {
#[inline]
fn format_snippet(
&self,
snippet_path: &std::path::Path,
) -> Result<(bool, Option<String>), MdsfError> {
match self {
Self::Fnlfmt => format_using_fnlfmt(snippet_path),
}
}
}

impl core::fmt::Display for Fennel {
#[inline]
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::Fnlfmt => write!(f, "fnlfmt"),
}
}
}

#[cfg(test)]
mod test_fennel {
use super::Fennel;
use crate::languages::Lang;

#[test]
fn it_should_be_enabled_by_default() {
assert!(Lang::<Fennel>::default().enabled);
}
}
5 changes: 5 additions & 0 deletions src/languages/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ pub mod elixir;
pub mod elm;
pub mod erb;
pub mod erlang;
pub mod fennel;
pub mod fortran;
pub mod fsharp;
pub mod gleam;
Expand Down Expand Up @@ -183,6 +184,7 @@ pub enum Language {
Elm,
Erb,
Erlang,
Fennel,
FSharp,
Fortran,
Gleam,
Expand Down Expand Up @@ -252,6 +254,7 @@ impl core::fmt::Display for Language {
Self::Elm => f.write_str("elm"),
Self::Erb => f.write_str("erb"),
Self::Erlang => f.write_str("erlang"),
Self::Fennel => f.write_str("fennel"),
Self::FSharp => f.write_str("f#"),
Self::Fortran => f.write_str("fortran"),
Self::Gleam => f.write_str("gleam"),
Expand Down Expand Up @@ -331,6 +334,7 @@ impl Language {
"elm" => Some(Self::Elm),
"erb" => Some(Self::Erb),
"erlang" => Some(Self::Erlang),
"fennel" | "fnl" => Some(Self::Fennel),
"fish" => Some(Self::Shell(ShellFlavor::Fish)),
"fortran" => Some(Self::Fortran),
"fsharp" => Some(Self::FSharp),
Expand Down Expand Up @@ -415,6 +419,7 @@ impl Language {
Self::Elm => ".elm",
Self::Erb => ".erb",
Self::Erlang => ".erl",
Self::Fennel => ".fnl",
Self::FSharp => ".fs",
Self::Fortran => ".f",
Self::Gleam => ".gleam",
Expand Down

0 comments on commit 5e2f4ba

Please sign in to comment.