Skip to content

Commit bdcd83a

Browse files
Better organize files
1 parent 08c660c commit bdcd83a

12 files changed

+176
-193
lines changed

src/compiler.gleam

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import compiler/generator
2+
import compiler/transformer
3+
import glance
4+
import gleam/result
5+
import pprint
6+
7+
pub fn parse(contents: String) -> Result(glance.Module, String) {
8+
contents
9+
|> glance.module
10+
|> result.map_error(fn(x) {
11+
pprint.debug(x)
12+
"Unable to parse"
13+
})
14+
}
15+
16+
pub fn compile(module_contents: String) -> Result(String, String) {
17+
module_contents
18+
|> parse
19+
|> result.try(transformer.transform)
20+
|> result.try(generator.generate)
21+
}

src/generator.gleam renamed to src/compiler/generator.gleam

+25-35
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import generator_helpers
1+
import compiler/internal/generator as internal
2+
import compiler/python
23
import gleam/int
34
import gleam/list
45
import gleam/option
56
import gleam/string_builder.{type StringBuilder}
6-
import pprint
7-
import python
87
import python_prelude
98

109
fn generate_import(import_: python.Import) -> StringBuilder {
@@ -100,7 +99,7 @@ fn generate_expression(expression: python.Expression) {
10099

101100
python.List(elements) ->
102101
string_builder.from_string("to_gleam_list([")
103-
|> string_builder.append_builder(generator_helpers.generate_plural(
102+
|> string_builder.append_builder(internal.generate_plural(
104103
elements,
105104
generate_expression,
106105
", ",
@@ -109,7 +108,7 @@ fn generate_expression(expression: python.Expression) {
109108

110109
python.ListWithRest(elements, rest) ->
111110
string_builder.from_string("to_gleam_list([")
112-
|> string_builder.append_builder(generator_helpers.generate_plural(
111+
|> string_builder.append_builder(internal.generate_plural(
113112
elements,
114113
generate_expression,
115114
", ",
@@ -123,7 +122,7 @@ fn generate_expression(expression: python.Expression) {
123122
|> string_builder.append("(")
124123
|> string_builder.append_builder(
125124
expressions
126-
|> generator_helpers.generate_plural(generate_expression, ", "),
125+
|> internal.generate_plural(generate_expression, ", "),
127126
)
128127
|> string_builder.append(")")
129128

@@ -143,7 +142,7 @@ fn generate_expression(expression: python.Expression) {
143142
|> string_builder.append("dataclasses.replace(")
144143
|> string_builder.append_builder(generate_expression(record))
145144
|> string_builder.append(", ")
146-
|> string_builder.append_builder(generator_helpers.generate_plural(
145+
|> string_builder.append_builder(internal.generate_plural(
147146
fields,
148147
generate_record_update_fields,
149148
", ",
@@ -152,7 +151,7 @@ fn generate_expression(expression: python.Expression) {
152151

153152
python.Lambda(arguments, body) -> {
154153
string_builder.from_string("(lambda ")
155-
|> string_builder.append_builder(generator_helpers.generate_plural(
154+
|> string_builder.append_builder(internal.generate_plural(
156155
arguments,
157156
generate_expression,
158157
", ",
@@ -182,7 +181,7 @@ fn generate_statement(statement: python.Statement) -> StringBuilder {
182181
case statement {
183182
python.Expression(expression) ->
184183
generate_expression(expression)
185-
|> generator_helpers.append_if_not_empty("\n")
184+
|> internal.append_if_not_empty("\n")
186185
python.Return(expression) ->
187186
string_builder.from_string("return ")
188187
|> string_builder.append_builder(generate_expression(expression))
@@ -205,11 +204,7 @@ fn generate_function_body(statements: List(python.Statement)) -> StringBuilder {
205204
case statements {
206205
[] -> string_builder.from_string("pass")
207206
multiple_lines ->
208-
generator_helpers.generate_plural(
209-
multiple_lines,
210-
generate_statement,
211-
"\n",
212-
)
207+
internal.generate_plural(multiple_lines, generate_statement, "\n")
213208
}
214209
}
215210

@@ -219,14 +214,14 @@ fn generate_function(function: python.Function) -> StringBuilder {
219214
|> string_builder.append("def ")
220215
|> string_builder.append(function.name)
221216
|> string_builder.append("(")
222-
|> string_builder.append_builder(generator_helpers.generate_plural(
217+
|> string_builder.append_builder(internal.generate_plural(
223218
function.parameters,
224219
generate_parameter,
225220
", ",
226221
))
227222
|> string_builder.append("):\n")
228223
|> string_builder.append_builder(
229-
generate_function_body(function.body) |> generator_helpers.indent(4),
224+
generate_function_body(function.body) |> internal.indent(4),
230225
)
231226
}
232227

@@ -246,7 +241,7 @@ fn generate_type(type_: python.Type) -> StringBuilder {
246241
[] -> string_builder.new()
247242
params_exist ->
248243
params_exist
249-
|> generator_helpers.generate_plural(generate_type, ",")
244+
|> internal.generate_plural(generate_type, ",")
250245
|> string_builder.prepend("[")
251246
|> string_builder.append("]")
252247
}
@@ -259,7 +254,7 @@ fn generate_type(type_: python.Type) -> StringBuilder {
259254

260255
python.TupleType(elements) ->
261256
elements
262-
|> generator_helpers.generate_plural(generate_type, ", ")
257+
|> internal.generate_plural(generate_type, ", ")
263258
|> string_builder.prepend("typing.Tuple[")
264259
|> string_builder.append("]")
265260

@@ -299,10 +294,9 @@ fn generate_type_variant(variant: python.Variant) -> StringBuilder {
299294
|> string_builder.append_builder(
300295
case variant.fields {
301296
[] -> string_builder.from_string("pass")
302-
fields ->
303-
generator_helpers.generate_plural(fields, generate_type_field, "\n")
297+
fields -> internal.generate_plural(fields, generate_type_field, "\n")
304298
}
305-
|> generator_helpers.indent(4),
299+
|> internal.indent(4),
306300
)
307301
}
308302

@@ -326,7 +320,7 @@ fn generate_custom_type(custom_type: python.CustomType) -> StringBuilder {
326320

327321
// we just discard the outer class if there is only one variant
328322
[one_variant] -> {
329-
generator_helpers.generate_plural(
323+
internal.generate_plural(
330324
custom_type.parameters,
331325
generate_generic_var,
332326
"\n",
@@ -336,7 +330,7 @@ fn generate_custom_type(custom_type: python.CustomType) -> StringBuilder {
336330
}
337331

338332
variants -> {
339-
generator_helpers.generate_plural(
333+
internal.generate_plural(
340334
custom_type.parameters,
341335
generate_generic_var,
342336
"\n",
@@ -345,15 +339,11 @@ fn generate_custom_type(custom_type: python.CustomType) -> StringBuilder {
345339
|> string_builder.append(custom_type.name)
346340
|> string_builder.append(":\n")
347341
|> string_builder.append_builder(
348-
generator_helpers.generate_plural(
349-
variants,
350-
generate_type_variant,
351-
"\n\n",
352-
)
353-
|> generator_helpers.indent(4)
354-
|> generator_helpers.append_if_not_empty("\n\n"),
342+
internal.generate_plural(variants, generate_type_variant, "\n\n")
343+
|> internal.indent(4)
344+
|> internal.append_if_not_empty("\n\n"),
355345
)
356-
|> string_builder.append_builder(generator_helpers.generate_plural(
346+
|> string_builder.append_builder(internal.generate_plural(
357347
custom_type.variants,
358348
generate_variant_reassign(custom_type.name),
359349
"\n",
@@ -364,20 +354,20 @@ fn generate_custom_type(custom_type: python.CustomType) -> StringBuilder {
364354
}
365355

366356
fn generate_imports(imports: List(python.Import)) -> StringBuilder {
367-
generator_helpers.generate_plural(imports, generate_import, "\n")
368-
|> generator_helpers.append_if_not_empty("\n\n\n")
357+
internal.generate_plural(imports, generate_import, "\n")
358+
|> internal.append_if_not_empty("\n\n\n")
369359
}
370360

371361
pub fn generate(module: python.Module) -> Result(String, String) {
372362
string_builder.new()
373363
|> string_builder.append(python_prelude.prelude)
374364
|> string_builder.append_builder(generate_imports(module.imports))
375-
|> string_builder.append_builder(generator_helpers.generate_plural(
365+
|> string_builder.append_builder(internal.generate_plural(
376366
module.custom_types,
377367
generate_custom_type,
378368
"\n\n\n",
379369
))
380-
|> string_builder.append_builder(generator_helpers.generate_plural(
370+
|> string_builder.append_builder(internal.generate_plural(
381371
module.functions,
382372
generate_function,
383373
"\n\n\n",
File renamed without changes.

src/internal/transformer.gleam renamed to src/compiler/internal/transformer.gleam

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import compiler/python
12
import glance
23
import gleam/list
34
import gleam/option
4-
import python
55

66
pub type ReversedList(a) =
77
List(a)
File renamed without changes.

0 commit comments

Comments
 (0)