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 9, 2023
1 parent f57f128 commit 444ea54
Show file tree
Hide file tree
Showing 20 changed files with 510 additions and 461 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,4 +214,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
3 changes: 2 additions & 1 deletion scripts/eofConvention.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ open System.IO
open System

#r "nuget: Mono.Unix, Version=7.1.0-final.1.21458.1"

#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
1 change: 1 addition & 0 deletions scripts/executableConvention.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ open System
open System.IO

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

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

#r "nuget: Mono.Unix, Version=7.1.0-final.1.21458.1"

#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
5 changes: 3 additions & 2 deletions scripts/inconsistentVersionsInGitHubCI.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
open System.IO

#r "nuget: Mono.Unix, Version=7.1.0-final.1.21458.1"

#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
5 changes: 3 additions & 2 deletions scripts/mixedLineEndings.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ open System
open System.IO

#r "nuget: Mono.Unix, Version=7.1.0-final.1.21458.1"

#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
5 changes: 3 additions & 2 deletions scripts/nonVerboseFlagsInGitHubCIAndScripts.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ open System
open System.IO

#r "nuget: Mono.Unix, Version=7.1.0-final.1.21458.1"

#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
5 changes: 3 additions & 2 deletions scripts/shebangConvention.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ open System
open System.IO

#r "nuget: Mono.Unix, Version=7.1.0-final.1.21458.1"

#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
19 changes: 19 additions & 0 deletions scripts/styleApply.fsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env -S dotnet fsi

#r "nuget: Mono.Unix, Version=7.1.0-final.1.21458.1"
#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()
187 changes: 187 additions & 0 deletions scripts/styleCheck.fsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
#!/usr/bin/env -S dotnet fsi

#r "nuget: Mono.Unix, Version=7.1.0-final.1.21458.1"
#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(".", "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 444ea54

Please sign in to comment.