mirror of
https://github.com/nushell/nushell.git
synced 2025-08-09 11:05:40 +02:00
REFACTOR: move the banner from the rust
source to the standard library (#8406)
Related to: - #8311 - #8353 # Description with the new `$nu.startup-time` from #8353 and as mentionned in #8311, we are now able to fully move the `nushell` banner from the `rust` source base to the standard library. this PR - removes all the `rust` source code for the banner - rewrites a perfect clone of the banner to `std.nu`, called `std banner` - call `std banner` from `default_config.nu` # User-Facing Changes see the demo: https://asciinema.org/a/566521 - no config will show the banner (e.g. `cargo run --release -- --no-config-file`) - a custom config without the `if $env.config.show_banner` block and no call to `std banner` would never show the banner - a custom config with the block and `config.show_banner = true` will show the banner - a custom config with the block and `config.show_banner = false` will NOT show the banner # Tests + Formatting a new test line has been added to `tests.nu` to check the length of the `std banner` output. - 🟢 `toolkit fmt` - 🟢 `toolkit clippy` - 🟢 `toolkit test` - 🟢 `toolkit test stdlib` # After Submitting ``` $nothing ``` --------- Co-authored-by: Darren Schroeder <343840+fdncred@users.noreply.github.com>
This commit is contained in:
226
crates/nu-std/lib/dt.nu
Normal file
226
crates/nu-std/lib/dt.nu
Normal file
@ -0,0 +1,226 @@
|
||||
def borrow-year [from: record, current: record] {
|
||||
mut current = $current
|
||||
|
||||
$current.year = $current.year - 1
|
||||
$current.month = $current.month + 12
|
||||
|
||||
$current
|
||||
}
|
||||
|
||||
def leap-year-days [year] {
|
||||
if $year mod 400 == 0 {
|
||||
29
|
||||
} else if $year mod 4 == 0 and $year mod 100 != 0 {
|
||||
29
|
||||
} else {
|
||||
28
|
||||
}
|
||||
}
|
||||
|
||||
def borrow-month [from: record, current: record] {
|
||||
mut current = $current
|
||||
if $from.month in [1, 3, 5, 7, 8, 10, 12] {
|
||||
$current.day = $current.day + 31
|
||||
$current.month = $current.month - 1
|
||||
if $current.month < 0 {
|
||||
$current = (borrow-year $from $current)
|
||||
}
|
||||
} else if $from.month in [4, 6, 9, 11] {
|
||||
$current.day = $current.day + 30
|
||||
$current.month = $current.month - 1
|
||||
if $current.month < 0 {
|
||||
$current = (borrow-year $from $current)
|
||||
}
|
||||
} else {
|
||||
# oh February
|
||||
let num_days_feb = (leap-year-days $current.year)
|
||||
$current.day = $current.day + $num_days_feb
|
||||
$current.month = $current.month - 1
|
||||
if $current.month < 0 {
|
||||
$current = (borrow-year $from $current)
|
||||
}
|
||||
}
|
||||
|
||||
$current
|
||||
}
|
||||
|
||||
def borrow-day [from: record, current: record] {
|
||||
mut current = $current
|
||||
$current.hour = $current.hour + 24
|
||||
$current.day = $current.day - 1
|
||||
if $current.day < 0 {
|
||||
$current = (borrow-month $from $current)
|
||||
}
|
||||
|
||||
$current
|
||||
}
|
||||
|
||||
def borrow-hour [from: record, current: record] {
|
||||
mut current = $current
|
||||
$current.minute = $current.minute + 60
|
||||
$current.hour = $current.hour - 1
|
||||
if $current.hour < 0 {
|
||||
$current = (borrow-day $from $current)
|
||||
}
|
||||
|
||||
$current
|
||||
}
|
||||
|
||||
def borrow-minute [from: record, current: record] {
|
||||
mut current = $current
|
||||
$current.second = $current.second + 60
|
||||
$current.minute = $current.minute - 1
|
||||
if $current.minute < 0 {
|
||||
$current = (borrow-hour $from $current)
|
||||
}
|
||||
|
||||
$current
|
||||
}
|
||||
|
||||
def borrow-second [from: record, current: record] {
|
||||
mut current = $current
|
||||
$current.millisecond = $current.millisecond + 1_000
|
||||
$current.second = $current.second - 1
|
||||
if $current.second < 0 {
|
||||
$current = (borrow-minute $from $current)
|
||||
}
|
||||
|
||||
$current
|
||||
}
|
||||
|
||||
def borrow-millisecond [from: record, current: record] {
|
||||
mut current = $current
|
||||
$current.microsecond = $current.microsecond + 1_000_000
|
||||
$current.millisecond = $current.millisecond - 1
|
||||
if $current.millisecond < 0 {
|
||||
$current = (borrow-second $from $current)
|
||||
}
|
||||
|
||||
$current
|
||||
}
|
||||
|
||||
def borrow-microsecond [from: record, current: record] {
|
||||
mut current = $current
|
||||
$current.nanosecond = $current.nanosecond + 1_000_000_000
|
||||
$current.microsecond = $current.microsecond - 1
|
||||
if $current.microsecond < 0 {
|
||||
$current = (borrow-millisecond $from $current)
|
||||
}
|
||||
|
||||
$current
|
||||
}
|
||||
|
||||
# Subtract two datetimes and return a record with the difference
|
||||
# Examples
|
||||
# print (datetime-diff 2023-05-07T04:08:45+12:00 2019-05-10T09:59:12+12:00)
|
||||
# print (datetime-diff (date now) 2019-05-10T09:59:12-07:00)
|
||||
export def datetime-diff [from: datetime, to: datetime] {
|
||||
let from_expanded = ($from | date to-timezone utc | date to-record | merge { millisecond: 0, microsecond: 0})
|
||||
let to_expanded = ($to | date to-timezone utc | date to-record | merge { millisecond: 0, microsecond: 0})
|
||||
|
||||
mut result = { year: ($from_expanded.year - $to_expanded.year), month: ($from_expanded.month - $to_expanded.month)}
|
||||
|
||||
if $result.month < 0 {
|
||||
$result = (borrow-year $from_expanded $result)
|
||||
}
|
||||
|
||||
$result.day = $from_expanded.day - $to_expanded.day
|
||||
if $result.day < 0 {
|
||||
$result = (borrow-month $from_expanded $result)
|
||||
}
|
||||
|
||||
$result.hour = $from_expanded.hour - $to_expanded.hour
|
||||
if $result.hour < 0 {
|
||||
$result = (borrow-day $from_expanded $result)
|
||||
}
|
||||
|
||||
$result.minute = $from_expanded.minute - $to_expanded.minute
|
||||
if $result.minute < 0 {
|
||||
$result = (borrow-hour $from_expanded $result)
|
||||
}
|
||||
|
||||
$result.second = $from_expanded.second - $to_expanded.second
|
||||
if $result.second < 0 {
|
||||
$result = (borrow-minute $from_expanded $result)
|
||||
}
|
||||
|
||||
$result.nanosecond = $from_expanded.nanosecond - $to_expanded.nanosecond
|
||||
if $result.nanosecond < 0 {
|
||||
$result = (borrow-second $from_expanded $result)
|
||||
}
|
||||
|
||||
$result.millisecond = ($result.nanosecond / 1_000_000 | into int) # don't want a decimal
|
||||
$result.microsecond = (($result.nanosecond mod 1_000_000) / 1_000 | into int)
|
||||
$result.nanosecond = ($result.nanosecond mod 1_000 | into int)
|
||||
|
||||
$result
|
||||
}
|
||||
|
||||
export def pretty-print-duration [dur: duration] {
|
||||
mut result = ""
|
||||
if $dur.year > 0 {
|
||||
if $dur.year > 1 {
|
||||
$result = $"($dur.year)yrs "
|
||||
} else {
|
||||
$result = $"($dur.year)yr "
|
||||
}
|
||||
}
|
||||
if $dur.month > 0 {
|
||||
if $dur.month > 1 {
|
||||
$result = $"($result)($dur.month)months "
|
||||
} else {
|
||||
$result = $"($result)($dur.month)month "
|
||||
}
|
||||
}
|
||||
if $dur.day > 0 {
|
||||
if $dur.day > 1 {
|
||||
$result = $"($result)($dur.day)days "
|
||||
} else {
|
||||
$result = $"($result)($dur.day)day "
|
||||
}
|
||||
}
|
||||
if $dur.hour > 0 {
|
||||
if $dur.hour > 1 {
|
||||
$result = $"($result)($dur.hour)hrs "
|
||||
} else {
|
||||
$result = $"($result)($dur.hour)hr "
|
||||
}
|
||||
}
|
||||
if $dur.minute > 0 {
|
||||
if $dur.minute > 1 {
|
||||
$result = $"($result)($dur.minute)mins "
|
||||
} else {
|
||||
$result = $"($result)($dur.minute)min "
|
||||
}
|
||||
}
|
||||
if $dur.second > 0 {
|
||||
if $dur.second > 1 {
|
||||
$result = $"($result)($dur.second)secs "
|
||||
} else {
|
||||
$result = $"($result)($dur.second)sec "
|
||||
}
|
||||
}
|
||||
if $dur.millisecond > 0 {
|
||||
if $dur.millisecond > 1 {
|
||||
$result = $"($result)($dur.millisecond)ms "
|
||||
} else {
|
||||
$result = $"($result)($dur.millisecond)ms "
|
||||
}
|
||||
}
|
||||
if $dur.microsecond > 0 {
|
||||
if $dur.microsecond > 1 {
|
||||
$result = $"($result)($dur.microsecond)µs "
|
||||
} else {
|
||||
$result = $"($result)($dur.microsecond)µs "
|
||||
}
|
||||
}
|
||||
if $dur.nanosecond > 0 {
|
||||
if $dur.nanosecond > 1 {
|
||||
$result = $"($result)($dur.nanosecond)ns "
|
||||
} else {
|
||||
$result = $"($result)($dur.nanosecond)ns "
|
||||
}
|
||||
}
|
||||
|
||||
$result
|
||||
}
|
@ -9,6 +9,7 @@ export use iter *
|
||||
export use log *
|
||||
export use testing *
|
||||
export use xml *
|
||||
export use dt [datetime-diff, pretty-print-duration]
|
||||
|
||||
# Add the given paths to the PATH.
|
||||
#
|
||||
@ -171,7 +172,7 @@ def "from ns" [] {
|
||||
# >
|
||||
# ```
|
||||
#
|
||||
# > **Note**
|
||||
# > **Note**
|
||||
# > `std bench --pretty` will return a `string`.
|
||||
#
|
||||
# # Examples
|
||||
@ -224,3 +225,27 @@ export def bench [
|
||||
$report
|
||||
}
|
||||
}
|
||||
|
||||
# print a banner for nushell, with information about the project
|
||||
#
|
||||
# Example:
|
||||
# an example can be found in [this asciinema recording](https://asciinema.org/a/566513)
|
||||
export def banner [] {
|
||||
let dt = (datetime-diff (date now) 2019-05-10T09:59:12-07:00)
|
||||
$"(ansi green) __ ,(ansi reset)
|
||||
(ansi green) .--\(\)°'.' (ansi reset)Welcome to (ansi green)Nushell(ansi reset),
|
||||
(ansi green)'|, . ,' (ansi reset)based on the (ansi green)nu(ansi reset) language,
|
||||
(ansi green) !_-\(_\\ (ansi reset)where all data is structured!
|
||||
|
||||
Please join our (ansi purple)Discord(ansi reset) community at (ansi purple)https://discord.gg/NtAbbGn(ansi reset)
|
||||
Our (ansi green_bold)GitHub(ansi reset) repository is at (ansi green_bold)https://github.com/nushell/nushell(ansi reset)
|
||||
Our (ansi green)Documentation(ansi reset) is located at (ansi green)https://nushell.sh(ansi reset)
|
||||
(ansi cyan)Tweet(ansi reset) us at (ansi cyan_bold)@nu_shell(ansi reset)
|
||||
Learn how to remove this at: (ansi green)https://nushell.sh/book/configuration.html#remove-welcome-message(ansi reset)
|
||||
|
||||
It's been this long since (ansi green)Nushell(ansi reset)'s first commit:
|
||||
(pretty-print-duration $dt)
|
||||
|
||||
Startup Time: ($nu.startup-time)
|
||||
"
|
||||
}
|
||||
|
Reference in New Issue
Block a user