Skip to content

Commit

Permalink
scripts: split styleChecker script
Browse files Browse the repository at this point in the history
Split styleChecker into styleCheck and styleApply.
  • Loading branch information
tehraninasab committed Aug 8, 2023
1 parent 9df4e40 commit ce5c213
Show file tree
Hide file tree
Showing 19 changed files with 515 additions and 449 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -212,4 +212,4 @@ jobs:
dotnet fantomless --recurse .
git diff --exit-code
- name: Check style of our F#, C#, TypeScript, YML and XAML code
run: sudo dotnet fsi scripts/styleChecker.fsx
run: sudo dotnet fsi scripts/styleCheck.fsx
2 changes: 2 additions & 0 deletions scripts/eofConvention.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
open System.IO
open System

#r "nuget: Fsdk, Version=0.6.0--date20230214-0422.git-1ea6f62"
#load "../src/FileConventions/Config.fs"
#load "../src/FileConventions/Helpers.fs"
#load "../src/FileConventions/Library.fs"

Expand Down
4 changes: 3 additions & 1 deletion scripts/inconsistentVersionsInFSharpScripts.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
open System.IO
open System.Linq

#load "../src/FileConventions/Library.fs"
#r "nuget: Fsdk, Version=0.6.0--date20230214-0422.git-1ea6f62"
#load "../src/FileConventions/Config.fs"
#load "../src/FileConventions/Helpers.fs"
#load "../src/FileConventions/Library.fs"

let rootDir = Path.Combine(__SOURCE_DIRECTORY__, "..") |> DirectoryInfo
let currentDir = Directory.GetCurrentDirectory() |> DirectoryInfo
Expand Down
4 changes: 3 additions & 1 deletion scripts/inconsistentVersionsInGitHubCI.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

open System.IO

#load "../src/FileConventions/Library.fs"
#r "nuget: Fsdk, Version=0.6.0--date20230214-0422.git-1ea6f62"
#load "../src/FileConventions/Config.fs"
#load "../src/FileConventions/Helpers.fs"
#load "../src/FileConventions/Library.fs"

let rootDir = Path.Combine(__SOURCE_DIRECTORY__, "..") |> DirectoryInfo

Expand Down
4 changes: 3 additions & 1 deletion scripts/mixedLineEndings.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
open System
open System.IO

#load "../src/FileConventions/Library.fs"
#r "nuget: Fsdk, Version=0.6.0--date20230214-0422.git-1ea6f62"
#load "../src/FileConventions/Config.fs"
#load "../src/FileConventions/Helpers.fs"
#load "../src/FileConventions/Library.fs"

let rootDir = Path.Combine(__SOURCE_DIRECTORY__, "..") |> DirectoryInfo

Expand Down
4 changes: 3 additions & 1 deletion scripts/nonVerboseFlagsInGitHubCIAndScripts.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
open System
open System.IO

#load "../src/FileConventions/Library.fs"
#r "nuget: Fsdk, Version=0.6.0--date20230214-0422.git-1ea6f62"
#load "../src/FileConventions/Config.fs"
#load "../src/FileConventions/Helpers.fs"
#load "../src/FileConventions/Library.fs"

let rootDir = Path.Combine(__SOURCE_DIRECTORY__, "..") |> DirectoryInfo

Expand Down
4 changes: 3 additions & 1 deletion scripts/shebangConvention.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
open System
open System.IO

#load "../src/FileConventions/Library.fs"
#r "nuget: Fsdk, Version=0.6.0--date20230214-0422.git-1ea6f62"
#load "../src/FileConventions/Config.fs"
#load "../src/FileConventions/Helpers.fs"
#load "../src/FileConventions/Library.fs"

let rootDir = Path.Combine(__SOURCE_DIRECTORY__, "..") |> DirectoryInfo

Expand Down
18 changes: 18 additions & 0 deletions scripts/styleApply.fsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/usr/bin/env -S dotnet fsi

#r "nuget: Fsdk, Version=0.6.0--date20230214-0422.git-1ea6f62"
#load "../src/FileConventions/Config.fs"
#load "../src/FileConventions/Helpers.fs"
#load "../src/FileConventions/Library.fs"

open System.IO

open FileConventions

let rootDir = Path.Combine(__SOURCE_DIRECTORY__, "..") |> DirectoryInfo

StyleFSharpFiles rootDir
StyleTypeScriptFiles()
StyleYmlFiles()
StyleCSharpFiles rootDir
StyleXamlFiles()
192 changes: 192 additions & 0 deletions scripts/styleCheck.fsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
#!/usr/bin/env -S dotnet fsi

#r "nuget: Fsdk, Version=0.6.0--date20230214-0422.git-1ea6f62"
#load "../src/FileConventions/Config.fs"
#load "../src/FileConventions/Helpers.fs"
#load "../src/FileConventions/Library.fs"

open System
open System.IO

open Fsdk
open Fsdk.Process

open Helpers
open FileConventions

let ContainsFiles (rootDir: DirectoryInfo) (searchPattern: string) =
Helpers.GetFiles rootDir searchPattern |> Seq.length > 0

let GitDiff() : ProcessResult =

// Since we changed file modes in the prettier step we need the following command to
// make git ignore mode changes in files and doesn't include them in the git diff command.
Process
.Execute(
{
Command = "git"
Arguments = "config core.fileMode false"
},
Echo.Off
)
.UnwrapDefault()
|> ignore

let processResult =
Process.Execute(
{
Command = "git"
Arguments = "diff --exit-code"
},
Echo.Off
)

processResult

let GitRestore() =
Process
.Execute(
{
Command = "git"
Arguments = "restore ."
},
Echo.Off
)
.UnwrapDefault()
|> ignore

let CheckStyleOfFSharpFiles(rootDir: DirectoryInfo) : bool =
let suggestion =
Some "Please style your F# code using: `dotnet fantomless --recurse .`"

GitRestore()

let success =
if ContainsFiles rootDir "*.fs" || ContainsFiles rootDir ".fsx" then
StyleFSharpFiles rootDir
let processResult = GitDiff()
UnwrapProcessResult suggestion true processResult |> ignore
IsProcessSuccessful processResult

else
true

success

let CheckStyleOfTypeScriptFiles(rootDir: DirectoryInfo) : bool =
let pattern =
$".{Path.DirectorySeparatorChar}**{Path.DirectorySeparatorChar}*.ts"

let suggestion =
Some
$"Please style your TypeScript code using: `npx prettier --quote-props=consistent --write {pattern}`"

GitRestore()

let success =
if ContainsFiles rootDir "*.ts" then
StyleTypeScriptFiles()
let processResult = GitDiff()
UnwrapProcessResult suggestion true processResult |> ignore
IsProcessSuccessful processResult

else
true

success

let CheckStyleOfYmlFiles(rootDir: DirectoryInfo) : bool =
let pattern =
$".{Path.DirectorySeparatorChar}**{Path.DirectorySeparatorChar}*.yml"

let suggestion =
Some
$"Please style your YML code using: `npx prettier --quote-props=consistent --write {pattern}`"

GitRestore()

let success =
if ContainsFiles rootDir "*.yml" then
StyleYmlFiles()
let processResult = GitDiff()
UnwrapProcessResult suggestion true processResult |> ignore
IsProcessSuccessful processResult
else
true

success

let CheckStyleOfCSharpFiles(rootDir: DirectoryInfo) : bool =
let suggestion =
Some
"Please style your C# code using: `dotnet format whitespace . --folder"

GitRestore()

let success =
if ContainsFiles rootDir "*.cs" then
StyleCSharpFiles rootDir
let processResult = GitDiff()
UnwrapProcessResult suggestion true processResult |> ignore
IsProcessSuccessful processResult
else
true

success

let CheckStyleOfXamlFiles(rootDir: DirectoryInfo) : bool =
let prettierPath =
Path.Combine(
Directory.GetCurrentDirectory(),
"node_modules",
".bin",
"prettier"
)

let pattern = $"**{Path.DirectorySeparatorChar}*.xaml"

let suggestion =
"Please style your XAML code using:"
+ Environment.NewLine
+ $"`{prettierPath} --xml-whitespace-sensitivity ignore --tab-width 4 --prose-wrap preserve --write {pattern}`"
|> Some

GitRestore()

let success =
if ContainsFiles rootDir "*.xaml" then
StyleXamlFiles()
let processResult = GitDiff()
UnwrapProcessResult suggestion true processResult |> ignore
IsProcessSuccessful processResult
else
true

success

let rootDir = Path.Combine(__SOURCE_DIRECTORY__, "..") |> DirectoryInfo

// We need this step so we can change the files using `npx prettier --write` in the prettier calls.
// Otherwise we get permission denied error in the CI.
Process
.Execute(
{
Command = "chmod"
Arguments = "777 --recursive ."
},
Echo.Off
)
.UnwrapDefault()
|> ignore

let processSuccessStates =
[|
CheckStyleOfFSharpFiles rootDir
CheckStyleOfCSharpFiles rootDir
CheckStyleOfTypeScriptFiles rootDir
CheckStyleOfYmlFiles rootDir
CheckStyleOfXamlFiles rootDir
|]

if processSuccessStates |> Seq.contains false then
Environment.Exit 1
Loading

0 comments on commit ce5c213

Please sign in to comment.