blob: b91261e3ce1e3a06fcaa9b43fb146c786f5bacf2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# Sloth projects are managed completely within their source code. While this
# without a doubt has its downsides it is generally nice as to distribute small
# sloth scripts you only need to distribute the sloth file. No more trying to
# run a script only to find out you need to install multiple 3rd party packages.
#
# As a result of this there needs to be a way in sloth itself to specify
# dependencies, and this is done with the `use extern` statement.
#
# So long as a version is specified and the repository is canopy this is safe
# without a lock file because all packages published on canopy are required to
# specify versions for all dependencies, can not override already published
# versions and can only depend on other packages inside of canopy.
use extern "http";
use extern "http" as web;
use extern "http:1.0.27";
use extern "canopy://http:1.0.27"; # Explicitly specify `canopy` protocol.
# While it is recommended that you only depend on packages from canopy, you can
# use packages from 3rd party sources using git (over https), ftp or https. When
# doing so however you are required to provide a module name with `as`.
#
# Versions can only be specified when using `sloth` or `git`
use extern "git://github.com/CatDevz/AdventOfCode.git" as spookylib;
use extern "ftp://codyq.dev/libs/spookylib.sloth" as spookylib;
use extern "https://codyq.dev/libs/spookylib.sloth" as spookylib;
# In sloth files will automatically become modules. Files named `mod.sloth` will
# become the module for the directory. If you have a project with multiple files
# the root module will be `mod.sloth`. Anything exposed in this can just strait up
# be used.
#
# If no `mod.sloth` exists, for example when running single file scripts, it will
# be trated as if there is one but its empty.
# /mod.sloth
pub fn fib(n: i32) -> i32 {
match n {
0 | 1 => n,
_ => fib(n - 1) + fib(n - 2),
}
}
# /foo.sloth
use fib; # TODO:
fib(5); # Works because everything inside of mod.sloth is fair game
# This means if you want an extern library to be available in every module you just
# need to add a `pub(pkg) use extern "lib"`
# In order to use modules or members of modules without quantifying the entire
# path you must include them using a `use` statement.
use foo::bar;
# Sloth will use your root module (the one used as your entrypoint) for imports.
# In order to import from modules relative to your own you must prefix the use
# with a `::`
use ::from::relative;
# If you would live to traverse up the module tree you can use the `super`
# psudo-module.
use
# TODO:
# Sloth will automatically turn files relative to your own and directories
# relative to your own with a `mod.sloth` into modules. In order to traverse
# up the module tree you can use the `super` psudo-module.
use super::a;
use super::b;
use std::rand::random;
use std::uuid;
use spookylib::spook;
use http::{get, post};
use web::Client as WebClient;
# If you would like to export a module you can use the `pub` keyword, unlike
# other times when the pub keyword is used however sloth will by default only
# publish it to `pkg`
pub use parse;
pub use blog;
|