Skip to content

Commit 8c6d31d

Browse files
committed
handle package and object for scala2
1 parent be2e9a7 commit 8c6d31d

File tree

6 files changed

+62
-26
lines changed

6 files changed

+62
-26
lines changed

src/Agda/Compiler/Scala/Backend.hs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Control.Monad.IO.Class ( MonadIO(liftIO) )
1111
import qualified Data.List.NonEmpty as Nel
1212
import Data.Maybe ( fromMaybe )
1313
import Data.Map ( Map )
14-
import qualified Data.Text.IO as T
14+
import qualified Data.Text as T
1515
import Data.Version ( showVersion )
1616
import System.Console.GetOpt ( OptDescr(Option), ArgDescr(ReqArg) )
1717

@@ -76,7 +76,6 @@ scalaBackendVersion = Just (showVersion version)
7676
defaultOptions :: ScalaFlags
7777
defaultOptions = Options{ optOutDir = Nothing, scalaDialect = Nothing }
7878

79-
-- TODO add option to choose Scala version (Scala 2.12 vs dotty vs Scala 4)
8079
-- TODO perhaps add option to choose if we want to produce Functor, Monad etc from zio/zio-prelude or typelevel/cats-effect
8180
-- TODO perhaps add option to use annotations from siddhartha-gadgil/ProvingGround library
8281
scalaCmdLineFlags :: [OptDescr (Flag ScalaFlags)]
@@ -155,8 +154,8 @@ compileModule :: TopLevelModuleName -> [ScalaDefinition] -> ScalaDefinition
155154
compileModule mName cdefs =
156155
SePackage (moduleName mName) cdefs
157156

158-
moduleName :: TopLevelModuleName -> String
159-
moduleName n = prettyShow (Nel.last (moduleNameParts n))
157+
moduleName :: TopLevelModuleName -> [String]
158+
moduleName n = Nel.toList (fmap T.unpack (moduleNameParts n)) -- (Nel.last (moduleNameParts n))
160159

161160
compileLog :: String -> TCMT IO ()
162161
compileLog msg = liftIO $ putStrLn msg

src/Agda/Compiler/Scala/PrintScala2.hs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Agda.Compiler.Scala.PrintScala2 ( printScala2
22
, printCaseObject
33
, printSealedTrait
4-
, printPackage
4+
, printPackageAndObject
55
, printCaseClass
66
, combineLines
77
) where
@@ -11,8 +11,8 @@ import Agda.Compiler.Scala.ScalaExpr ( ScalaName, ScalaExpr(..), SeVar(..))
1111

1212
printScala2 :: ScalaExpr -> String
1313
printScala2 def = case def of
14-
(SePackage pName defs) ->
15-
(printPackage pName) <> exprSeparator -- TODO this should be package + object
14+
(SePackage pNames defs) ->
15+
(printPackageAndObject pNames) <> exprSeparator
1616
<> bracket (
1717
blankLine -- between package declaration and first definition
1818
<> combineLines (map printScala2 defs)
@@ -53,8 +53,19 @@ printCaseObject :: ScalaName -> ScalaName -> String
5353
printCaseObject superName caseName =
5454
"case object" <> exprSeparator <> caseName <> exprSeparator <> "extends" <> exprSeparator <> superName
5555

56-
printPackage :: ScalaName -> String
57-
printPackage pName = "object" <> exprSeparator <> pName
56+
printPackageAndObject :: [ScalaName] -> String
57+
printPackageAndObject [] = ""
58+
printPackageAndObject (oname:[]) = printObject oname
59+
printPackageAndObject pName = printPackage (init pName)
60+
<> defsSeparator <> defsSeparator
61+
<> (printObject (last pName))
62+
63+
printPackage :: [ScalaName] -> String
64+
printPackage [] = ""
65+
printPackage pName = "package" <> exprSeparator <> (intercalate "." pName)
66+
67+
printObject :: ScalaName -> String
68+
printObject pName = "object" <> exprSeparator <> pName
5869

5970
bracket :: String -> String
6071
bracket str = "{\n" <> str <> "\n}"

src/Agda/Compiler/Scala/PrintScala3.hs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module Agda.Compiler.Scala.PrintScala3 ( printScala3
22
, printCaseObject
33
, printSealedTrait
4-
, printPackage
4+
, printPackageAndObject
55
, printCaseClass
66
, combineLines
77
) where
@@ -11,8 +11,8 @@ import Agda.Compiler.Scala.ScalaExpr ( ScalaName, ScalaExpr(..), SeVar(..))
1111

1212
printScala3 :: ScalaExpr -> String
1313
printScala3 def = case def of
14-
(SePackage pName defs) ->
15-
(printPackage pName) <> exprSeparator -- TODO this should be package + object
14+
(SePackage pNames defs) ->
15+
(printPackageAndObject pNames) <> exprSeparator
1616
<> bracket (
1717
blankLine -- between package declaration and first definition
1818
<> combineLines (map printScala3 defs)
@@ -53,8 +53,19 @@ printCaseObject :: ScalaName -> ScalaName -> String
5353
printCaseObject superName caseName =
5454
"case object" <> exprSeparator <> caseName <> exprSeparator <> "extends" <> exprSeparator <> superName
5555

56-
printPackage :: ScalaName -> String
57-
printPackage pName = "object" <> exprSeparator <> pName
56+
printPackageAndObject :: [ScalaName] -> String
57+
printPackageAndObject [] = ""
58+
printPackageAndObject (oname:[]) = printObject oname
59+
printPackageAndObject pName = printPackage (init pName)
60+
<> defsSeparator <> defsSeparator
61+
<> (printObject (last pName))
62+
63+
printPackage :: [ScalaName] -> String
64+
printPackage [] = ""
65+
printPackage pNames = "package" <> exprSeparator <> (intercalate "." pNames)
66+
67+
printObject :: ScalaName -> String
68+
printObject pName = "object" <> exprSeparator <> pName
5869

5970
bracket :: String -> String
6071
bracket str = "{\n" <> str <> "\n}"

src/Agda/Compiler/Scala/ScalaExpr.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ data SeVar = SeVar ScalaName ScalaType
1616

1717
{- Represent Scala language extracted from internal Agda compiler representation -}
1818
data ScalaExpr
19-
= SePackage ScalaName [ScalaExpr]
19+
= SePackage [ScalaName] [ScalaExpr]
2020
| SeSum ScalaName [ScalaName]
2121
| SeFun ScalaName [SeVar] ScalaType FunBody
2222
| SeProd ScalaName [SeVar]

test/PrintScala2Test.hs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Agda.Compiler.Scala.PrintScala2 (
55
printScala2
66
, printSealedTrait
77
, printCaseObject
8-
, printPackage
8+
, printPackageAndObject
99
, combineLines
1010
, printCaseClass
1111
)
@@ -23,11 +23,23 @@ testPrintSealedTrait = TestCase
2323
"sealed trait Color"
2424
(printSealedTrait "Color"))
2525

26-
testPrintPackage :: Test
27-
testPrintPackage = TestCase
28-
(assertEqual "printPackage"
26+
testObjectWhenNoPackage :: Test
27+
testObjectWhenNoPackage = TestCase
28+
(assertEqual "printPackageAndObject"
2929
"object adts"
30-
(printPackage "adts"))
30+
(printPackageAndObject ["adts"]))
31+
32+
testPrintPackageAndObject :: Test
33+
testPrintPackageAndObject = TestCase
34+
(assertEqual "printPackageAndObject"
35+
"package example\n\nobject adts"
36+
(printPackageAndObject ["example", "adts"]))
37+
38+
testPrintMultiplePartPackageAndObject :: Test
39+
testPrintMultiplePartPackageAndObject = TestCase
40+
(assertEqual "printPackageAndObject"
41+
"package org.example\n\nobject adts"
42+
(printPackageAndObject ["org", "example", "adts"]))
3143

3244
testCombineLines :: Test
3345
testCombineLines = TestCase
@@ -37,8 +49,9 @@ testCombineLines = TestCase
3749

3850
testPrintScala2:: Test
3951
testPrintScala2 = TestCase
40-
(assertEqual "printScala2" (printScala2 $ SePackage "adts" moduleContent)
52+
(assertEqual "printScala2"
4153
"object adts {\n\nsealed trait Rgb\ncase object Red extends Rgb\ncase object Green extends Rgb\ncase object Blue extends Rgb\n\nsealed trait Color\ncase object Light extends Color\ncase object Dark extends Color\n}\n"
54+
(printScala2 $ SePackage ["adts"] moduleContent)
4255
)
4356
where
4457
moduleContent = [rgbAdt, blank, blank, blank, colorAdt, blank, blank]
@@ -57,7 +70,9 @@ printScala2Tests :: Test
5770
printScala2Tests = TestList [
5871
TestLabel "printCaseObject" testPrintCaseObject
5972
, TestLabel "printSealedTrait" testPrintSealedTrait
60-
, TestLabel "printPackage" testPrintPackage
73+
, TestLabel "printObject" testObjectWhenNoPackage
74+
, TestLabel "printPackageAndObject" testPrintPackageAndObject
75+
, TestLabel "printPackageAndObject 2" testPrintMultiplePartPackageAndObject
6176
, TestLabel "combineLines" testCombineLines
6277
, TestLabel "printCaseClass" testPrintCaseClass
6378
, TestLabel "printScala2" testPrintScala2

test/PrintScala3Test.hs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Agda.Compiler.Scala.PrintScala3 (
55
printScala3
66
, printSealedTrait
77
, printCaseObject
8-
, printPackage
8+
, printPackageAndObject
99
, combineLines
1010
, printCaseClass
1111
)
@@ -25,9 +25,9 @@ testPrintSealedTrait = TestCase
2525

2626
testPrintPackage :: Test
2727
testPrintPackage = TestCase
28-
(assertEqual "printPackage"
28+
(assertEqual "printPackageAndObject"
2929
"object adts"
30-
(printPackage "adts"))
30+
(printPackageAndObject ["adts"]))
3131

3232
testCombineLines :: Test
3333
testCombineLines = TestCase
@@ -37,7 +37,7 @@ testCombineLines = TestCase
3737

3838
testPrintScala3 :: Test
3939
testPrintScala3 = TestCase
40-
(assertEqual "printScala3" (printScala3 $ SePackage "adts" moduleContent)
40+
(assertEqual "printScala3" (printScala3 $ SePackage ["adts"] moduleContent)
4141
"object adts {\n\nsealed trait Rgb\ncase object Red extends Rgb\ncase object Green extends Rgb\ncase object Blue extends Rgb\n\nsealed trait Color\ncase object Light extends Color\ncase object Dark extends Color\n}\n"
4242
)
4343
where

0 commit comments

Comments
 (0)