6 ms·
C and Python automatically concatenate string literals, and Rust has the concat! macro. There's no problem just writing it in a way that works correctly with an
by qzzi 1y ago
C and Python automatically concatenate string literals, and Rust has the concat! macro. There's no problem just writing it in a way that works correctly with any indentation. No need for weird-strings.
" one\n"
" two\n"
" three\n"
- drjeats 1y agoPersonally, I'd rather prefix with `\\` than have to postfix with `\n`. The `\\` is automatically prepended when I enter a newline in my editor after I start a multiline string, much like editors have done for C-style multiline comments for years. Snippet from my shader compiler tests (the `\` vs `/` in the paths in params and output is intentional, when compiled it will generate escape errors so I'm prodded to make everything `/`): test "shader_root_gen" { const expected = \\// Generated file! \\ \\pub const @"spriteszzz" = opaque { \\ pub const @"quadsprite" = @import("src\spriteszzz/quadsprite.glsl"); \\}; \\ \\pub const @"sprites" = opaque { \\ pub const @"universalsprite" = @import("src\sprites/universalsprite.glsl"); \\}; \\ \\pub const @"simpleshader" = @import("src/simpleshader.glsl"); \\ ; const cmdline = \\--prefix src -o testfile.zig src\spriteszzz/quadsprite.glsl src\sprites/universalsprite.glsl src/simpleshader.glsl ; var args_iter = std.mem.tokenizeScalar(u8, cmdline, ' '); const params = try Params.parseFromCmdLineArgs(&args_iter); var buffer: [expected.len * 2]u8 = undefined; var stream = std.io.fixedBufferStream(buffer[0..]); try generateSource(stream.writer().any(), params.input_files.items, params.prefix); const actual = stream.getWritten(); try std.testing.expectEqualSlices(u8, expected, actual); }