Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stop publishing First/Last as constructors and use auto-scoping for take and drop. #10467

Merged
merged 11 commits into from
Jul 8, 2024
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@
- [Renamed `Location.Start` to `Location.Left` and `Location.End` to
`Location.Right`.][10445]
- [Renamed `Postgres_Details.Postgres` to `Postgres.Server`.][10466]
- [Remove `First` and `Last` from namespace, use auto-scoped.][10467]

[10434]: https:/enso-org/enso/pull/10434
[10445]: https:/enso-org/enso/pull/10445
[10466]: https:/enso-org/enso/pull/10466
[10467]: https:/enso-org/enso/pull/10467

# Enso 2024.2

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ type S3_Path
without the trailing delimiter.
file_name self -> Text =
if self.is_root then S3_Path.delimiter else
trimmed = if self.key.ends_with S3_Path.delimiter then self.key.drop (Last 1) else self.key
trimmed = if self.key.ends_with S3_Path.delimiter then self.key.drop (..Last 1) else self.key
last_index = trimmed.last_index_of S3_Path.delimiter
if last_index == Nothing then trimmed else trimmed.drop (First last_index+1)
if last_index == Nothing then trimmed else trimmed.drop (..First last_index+1)

## PRIVATE
Checks if the given other path is inside of this path.
Expand Down Expand Up @@ -126,7 +126,7 @@ type Decomposed_S3_Path
True -> parts.map Path_Entry.Directory
False ->
if parts.is_empty then [] else
(parts.drop (Last 1) . map Path_Entry.Directory) + [Path_Entry.File parts.last]
(parts.drop (..Last 1) . map Path_Entry.Directory) + [Path_Entry.File parts.last]
Decomposed_S3_Path.Value entries has_root_prefix

## PRIVATE
Expand All @@ -152,5 +152,5 @@ type Decomposed_S3_Path
## PRIVATE
parent self -> Decomposed_S3_Path | Nothing =
if self.parts.is_empty then Nothing else
new_parts = self.parts.drop (Last 1)
new_parts = self.parts.drop (..Last 1)
Decomposed_S3_Path.Value new_parts self.go_to_root
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ type Array
If a `Range`, the selection is specified by two indices, from and to.
@range Index_Sub_Range.default_widget
take : (Index_Sub_Range | Range | Integer) -> Vector Any
take self range=(Index_Sub_Range.First 1) =
take self range:(Index_Sub_Range | Range | Integer)=..First =
Array_Like_Helpers.take self range

## ALIAS skip, remove
Expand All @@ -177,7 +177,7 @@ type Array
If a `Range`, the selection is specified by two indices, from and to.
@range Index_Sub_Range.default_widget
drop : (Index_Sub_Range | Range | Integer) -> Vector Any
drop self range=(Index_Sub_Range.First 1) =
drop self range:(Index_Sub_Range | Range | Integer)=..First =
Array_Like_Helpers.drop self range

## GROUP Calculations
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@ type Index_Sub_Range
`Range` too.
default_options : Vector Option
default_options =
o1 = Option "First" "(Index_Sub_Range.First 1)"
o2 = Option "Last" "(Index_Sub_Range.Last 1)"
o3 = Option "While" "(Index_Sub_Range.While (x-> False))"
o4 = Option "By_Index" "(Index_Sub_Range.By_Index [0])"
o5 = Option "Sample" "(Index_Sub_Range.Sample 10)"
o6 = Option "Every" "(Index_Sub_Range.Every 2)"
o1 = Option "First" "(..First 1)"
o2 = Option "Last" "(..Last 1)"
o3 = Option "While" "(..While (x-> False))"
o4 = Option "By_Index" "(..By_Index [0])"
o5 = Option "Sample" "(..Sample 10)"
o6 = Option "Every" "(..Every 2)"
o7 = Option "Range" "(Range.new 0 100)"
[o1, o2, o3, o4, o5, o6, o7]

Expand Down Expand Up @@ -196,7 +196,7 @@ sort_and_merge_ranges ranges =
normalization on its own.
- range: The `Index_Sub_Range` to take from the collection.
take_helper : Integer -> (Integer -> Any) -> (Integer -> Integer -> Any) -> (Vector (Integer | Range) -> Vector Any) -> (Index_Sub_Range | Range | Integer) -> Any
take_helper length at single_slice slice_ranges range = case range of
take_helper length at single_slice slice_ranges range:(Index_Sub_Range | Range | Integer) = case range of
count : Integer -> take_helper length at single_slice slice_ranges (Index_Sub_Range.First count)
_ : Range -> take_helper length at single_slice slice_ranges (Index_Sub_Range.By_Index range)
Index_Sub_Range.First count -> single_slice 0 (length.min count)
Expand Down Expand Up @@ -247,7 +247,7 @@ take_helper length at single_slice slice_ranges range = case range of
normalized.
- range: The `Index_Sub_Range` to drop from the collection.
drop_helper : Integer -> (Integer -> Any) -> (Integer -> Integer -> Any) -> (Vector (Integer | Range) -> Vector Any) -> (Index_Sub_Range | Range | Integer) -> Any
drop_helper length at single_slice slice_ranges range = case range of
drop_helper length at single_slice slice_ranges range:(Index_Sub_Range | Range | Integer) = case range of
_ : Integer -> single_slice range length
_ : Range -> drop_helper length at single_slice slice_ranges (Index_Sub_Range.By_Index range)
Index_Sub_Range.First count -> single_slice count length
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import project.Data.Numbers.Integer
import project.Data.Numbers.Number
import project.Data.Numeric.Math_Context.Math_Context
import project.Data.Text.Text
import project.Data.Text.Text_Sub_Range.Text_Sub_Range
import project.Data.Vector.Vector
import project.Error.Error
import project.Errors.Deprecated.Deprecated
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1033,29 +1033,29 @@ Text.repeat self count=1 =
> Example
Various different ways to take part of "Hello World!"

"Hello World!".take First == "H"
"Hello World!".take (First 5) == "Hello"
"Hello World!".take (First 0) == ""
"Hello World!".take Last == "!"
"Hello World!".take (Last 6) == "World!"
"Hello World!".take (Before " ") == "Hello"
"Hello World!".take (Before_Last "o") == "Hello W"
"Hello World!".take (After " ") == "World!"
"Hello World!".take (After_Last "o") == "rld!"
"Hello World!".take (While c->c!=" ") == "Hello"
"Hello World!".take (Range 3 5) == "lo"
"Hello World!".take (Range 5 Nothing) == " World!"
"Hello World!".take (Range 5 12) == " World!"
"Hello World!".take (Range 6 12 2) == "Wrd"
"Hello World!".take (Every 2 first=6) == "Wrd"
"Hello World!".take (Every 3) == "Hl Wl"
"Hello World!".take (By_Index 0) == "H"
"Hello World!".take (By_Index [1, 0, 0, 6, 0]) == "eHHWH"
"Hello World!".take (By_Index [Range 0 3, 6, Range 6 12 2]) == "HelWWrd"
"Hello World!".take (Sample 3 seed=42) == "l d"
"Hello World!".take ..First == "H"
"Hello World!".take (..First 5) == "Hello"
"Hello World!".take (..First 0) == ""
"Hello World!".take ..Last == "!"
"Hello World!".take (..Last 6) == "World!"
"Hello World!".take (..Before " ") == "Hello"
"Hello World!".take (..Before_Last "o") == "Hello W"
"Hello World!".take (..After " ") == "World!"
"Hello World!".take (..After_Last "o") == "rld!"
"Hello World!".take (..While c->c!=" ") == "Hello"
"Hello World!".take (..Range 3 5) == "lo"
"Hello World!".take (..Range 5 Nothing) == " World!"
"Hello World!".take (..Range 5 12) == " World!"
"Hello World!".take (..Range 6 12 2) == "Wrd"
"Hello World!".take (..Every 2 first=6) == "Wrd"
"Hello World!".take (..Every 3) == "Hl Wl"
"Hello World!".take (..By_Index 0) == "H"
"Hello World!".take (..By_Index [1, 0, 0, 6, 0]) == "eHHWH"
"Hello World!".take (..By_Index [Range 0 3, 6, Range 6 12 2]) == "HelWWrd"
"Hello World!".take (..Sample 3 seed=42) == "l d"
@range Text_Sub_Range.default_widget
Text.take : (Text_Sub_Range | Index_Sub_Range | Range | Integer) -> Text ! Index_Out_Of_Bounds
Text.take self range=(Index_Sub_Range.First 1) =
Text.take self range:(Text_Sub_Range | Index_Sub_Range | Range | Integer)=..First =
ranges = Codepoint_Ranges.resolve self range
case ranges of
Range.Between start end 1 ->
Expand All @@ -1082,29 +1082,29 @@ Text.take self range=(Index_Sub_Range.First 1) =
> Example
Various different ways to take part of "Hello World!"

"Hello World!".drop First == "ello World!"
"Hello World!".drop (First 5) == " World!"
"Hello World!".drop (First 0) == "Hello World!"
"Hello World!".drop Last == "Hello World"
"Hello World!".drop (Last 6) == "Hello "
"Hello World!".drop (Before " ") == " World!"
"Hello World!".drop (Before_Last "o") == "orld!"
"Hello World!".drop (After " ") == "Hello "
"Hello World!".drop (After_Last "o") == "Hello Wo"
"Hello World!".drop (While c->c!=" ") == " World!"
"Hello World!".drop (Range 3 5) == "Hel World!"
"Hello World!".drop (Range 5 Nothing) == "Hello"
"Hello World!".drop (Range 5 12) == "Hello"
"Hello World!".drop (Range 6 12 2) == "Hello ol!"
"Hello World!".drop (Every 2 first=6) == "Hello ol!"
"Hello World!".drop (Every 3) == "elo ord!"
"Hello World!".drop (By_Index 0) == "ello World!"
"Hello World!".drop (By_Index [1, 0, 0, 6, 0]) == "llo orld!"
"Hello World!".drop (By_Index [Range 0 3, 6, Range 6 12 2]) == "lo ol!"
"Hello World!".drop (Sample 3 seed=42) == "HeloWorl!"
"Hello World!".drop ..First == "ello World!"
"Hello World!".drop (..First 5) == " World!"
"Hello World!".drop (..First 0) == "Hello World!"
"Hello World!".drop ..Last == "Hello World"
"Hello World!".drop (..Last 6) == "Hello "
"Hello World!".drop (..Before " ") == " World!"
"Hello World!".drop (..Before_Last "o") == "orld!"
"Hello World!".drop (..After " ") == "Hello "
"Hello World!".drop (..After_Last "o") == "Hello Wo"
"Hello World!".drop (..While c->c!=" ") == " World!"
"Hello World!".drop (..Range 3 5) == "Hel World!"
"Hello World!".drop (..Range 5 Nothing) == "Hello"
"Hello World!".drop (..Range 5 12) == "Hello"
"Hello World!".drop (..Range 6 12 2) == "Hello ol!"
"Hello World!".drop (..Every 2 first=6) == "Hello ol!"
"Hello World!".drop (..Every 3) == "elo ord!"
"Hello World!".drop (..By_Index 0) == "ello World!"
"Hello World!".drop (..By_Index [1, 0, 0, 6, 0]) == "llo orld!"
"Hello World!".drop (..By_Index [Range 0 3, 6, Range 6 12 2]) == "lo ol!"
"Hello World!".drop (..Sample 3 seed=42) == "HeloWorl!"
@range Text_Sub_Range.default_widget
Text.drop : (Text_Sub_Range | Index_Sub_Range | Range) -> Text ! Index_Out_Of_Bounds
Text.drop self range=(Index_Sub_Range.First 1) =
Text.drop self range:(Text_Sub_Range | Index_Sub_Range | Range | Integer)=..First =
ranges = Codepoint_Ranges.resolve self range
case ranges of
Range.Between start end 1 ->
Expand Down Expand Up @@ -1197,9 +1197,9 @@ Text.pad self length:Integer=0 with_pad:Text=' ' at:Location=..Right = case at o
remainder = pad_size % with_pad_length
case at of
Location.Left ->
with_pad.take (Index_Sub_Range.Last remainder) + with_pad.repeat full_repetitions + self
with_pad.take (..Last remainder) + with_pad.repeat full_repetitions + self
Location.Right ->
self + with_pad.repeat full_repetitions + with_pad.take (Index_Sub_Range.First remainder)
self + with_pad.repeat full_repetitions + with_pad.take (..First remainder)

## GROUP Text
ICON text
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import project.Data.Index_Sub_Range as Index_Sub_Range_Module
import project.Data.Index_Sub_Range.Index_Sub_Range
import project.Data.Numbers.Integer
import project.Data.Pair.Pair
Expand All @@ -16,7 +15,7 @@ import project.Nothing.Nothing
import project.Panic.Panic
import project.Random.Random
from project.Data.Boolean import Boolean, False, True
from project.Data.Index_Sub_Range import handle_unmatched_type
from project.Data.Index_Sub_Range import handle_unmatched_type, sort_and_merge_ranges
from project.Data.Range.Extensions import all
from project.Metadata.Choice import Option
from project.Metadata.Widget import Single_Choice
Expand Down Expand Up @@ -56,10 +55,10 @@ type Text_Sub_Range
## PRIVATE
default_options : Vector Option
default_options =
o1 = Option "Before" "(Text_Sub_Range.Before ' ')"
o2 = Option "Before_Last" "(Text_Sub_Range.Before_Last ' ')"
o3 = Option "After" "(Text_Sub_Range.After ' ')"
o4 = Option "After_Last" "(Text_Sub_Range.After_Last ' ')"
o1 = Option "Before" "(..Before ' ')"
o2 = Option "Before_Last" "(..Before_Last ' ')"
o3 = Option "After" "(..After ' ')"
o4 = Option "After_Last" "(..After_Last ' ')"
[o1, o2, o3, o4]

## PRIVATE
Expand Down Expand Up @@ -89,7 +88,7 @@ type Codepoint_Ranges
Empty ranges are not discarded.
sorted_and_distinct_ranges : Vector Range
sorted_and_distinct_ranges self = if self.is_sorted_and_distinct then self.ranges else
Index_Sub_Range_Module.sort_and_merge_ranges self.ranges
sort_and_merge_ranges self.ranges

## PRIVATE
Finds code-point indices corresponding to the part of the input matching the
Expand All @@ -102,7 +101,7 @@ type Codepoint_Ranges
in such a way that the ranges returned by this method always have a step
equal to 1.
resolve : Text -> (Text_Sub_Range | Index_Sub_Range | Range | Integer) -> (Range | Codepoint_Ranges)
resolve text range =
resolve text:Text range:(Text_Sub_Range | Index_Sub_Range | Range | Integer) =
case range of
Text_Sub_Range.Before delimiter ->
if delimiter.is_empty then (0.up_to 0) else
Expand Down Expand Up @@ -151,13 +150,13 @@ type Codepoint_Ranges
Index_Sub_Range.Sample count seed ->
rng = Random.new_generator seed
indices = rng.indices text.length count
Codepoint_Ranges.resolve text (Index_Sub_Range.By_Index indices)
Codepoint_Ranges.resolve text (..By_Index indices)
Index_Sub_Range.Every step start ->
if step <= 0 then Error.throw (Illegal_Argument.Error "Step within Every must be positive.") else
len = text.length
if start >= len then 0.up_to 0 else
simple_range = start.up_to text.length . with_step step
Codepoint_Ranges.resolve text (Index_Sub_Range.By_Index simple_range)
Codepoint_Ranges.resolve text (..By_Index simple_range)
_ : Range ->
Codepoint_Ranges.resolve text (Index_Sub_Range.By_Index range)
_ : Integer ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,7 @@ type Vector a
If a `Range`, the selection is specified by two indices, from and to.
@range Index_Sub_Range.default_widget
take : (Index_Sub_Range | Range | Integer) -> Vector Any
take self range=(Index_Sub_Range.First 1) =
take self range:(Index_Sub_Range | Range | Integer)=..First =
Array_Like_Helpers.take self range

## ALIAS skip, remove
Expand All @@ -989,7 +989,7 @@ type Vector a
If a `Range`, the selection is specified by two indices, from and to.
@range Index_Sub_Range.default_widget
drop : (Index_Sub_Range | Range | Integer) -> Vector Any
drop self range=(Index_Sub_Range.First 1) =
drop self range:(Index_Sub_Range | Range | Integer)=..First =
Array_Like_Helpers.drop self range

## ALIAS combine, join by row position, merge
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ import project.System.File_Format_Metadata.File_Format_Metadata
import project.System.Input_Stream.Input_Stream
import project.System.Output_Stream.Output_Stream
from project.Data.Boolean import Boolean, False, True
from project.Data.Index_Sub_Range.Index_Sub_Range import Last
from project.Data.Text.Extensions import all
from project.Enso_Cloud.Internal.Enso_File_Helpers import all
from project.Enso_Cloud.Public_Utils import get_required_field
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
private

import project.Any.Any
import project.Data.Index_Sub_Range.Index_Sub_Range
import project.Data.Json.Invalid_JSON
import project.Data.Json.JS_Object
import project.Data.Map.Map
Expand Down Expand Up @@ -115,7 +114,7 @@ create_datalink_from_stream_action (destination : Enso_File) (allow_existing : B
if existing_asset.is_nothing.not && existing_asset.asset_type != Enso_Asset_Type.Data_Link then Error.throw (Illegal_Argument.Error "The destination must be a path to a Data Link, not "+existing_asset.asset_type.to_text+".") else
file_name = destination.name
if file_name.ends_with data_link_extension . not then Error.throw (Illegal_Argument.Error "A datalink must have a name ending with "+data_link_extension+", but the provided name was: "+file_name) else
title = file_name.drop (Index_Sub_Range.Last data_link_extension.length)
title = file_name.drop (..Last data_link_extension.length)
stream_result = Output_Stream.with_memory_stream stream_action
raw_bytes = stream_result.first
action_result = stream_result.second
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
private

import project.Data.Index_Sub_Range.Index_Sub_Range
import project.Data.Text.Text
import project.Data.Vector.Vector
import project.Enso_Cloud.Enso_File.Enso_File
Expand Down Expand Up @@ -42,7 +41,7 @@ type Enso_Path
## PRIVATE
parent self -> Enso_Path =
if self.is_root then Error.throw (Illegal_Argument.Error "Cannot get parent of the root directory.") else
Enso_Path.Value self.organization_name (self.path_segments.drop (Index_Sub_Range.Last 1))
Enso_Path.Value self.organization_name (self.path_segments.drop (..Last 1))

## PRIVATE
resolve self (subpath : Text) -> Enso_Path =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ private
import project.Data.Json.JS_Object
import project.Data.Map.Map
import project.Data.Text.Text
import project.Data.Text.Text_Sub_Range.Text_Sub_Range
import project.Data.Time.Date_Time.Date_Time
import project.Data.Time.Date_Time_Formatter.Date_Time_Formatter
import project.Data.Vector.Vector
Expand Down Expand Up @@ -112,7 +111,7 @@ type Existing_Enso_Asset

## PRIVATE
from_id_and_title id:Text title:Text -> Existing_Enso_Asset =
asset_type = Enso_Asset_Type.from (id.take (Text_Sub_Range.Before "-"))
asset_type = Enso_Asset_Type.from (id.take (..Before "-"))
Existing_Enso_Asset.Value title id asset_type


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ private
import project.Any.Any
import project.Data.Array.Array
import project.Data.Array_Proxy.Array_Proxy
import project.Data.Index_Sub_Range.Index_Sub_Range
import project.Data.List.List
import project.Data.Map.Map
import project.Data.Maybe.Maybe
Expand All @@ -25,7 +26,7 @@ import project.Runtime.Ref.Ref
import project.Warning.Warning
from project.Data.Boolean import Boolean, False, True
from project.Data.Filter_Condition import unify_condition_or_predicate, unify_condition_predicate_or_element
from project.Data.Index_Sub_Range import drop_helper, Index_Sub_Range, take_helper
from project.Data.Index_Sub_Range import drop_helper, take_helper
from project.Data.Ordering import Comparable
from project.Data.Range.Extensions import all

Expand Down Expand Up @@ -310,7 +311,7 @@ to_list vector =

short_display_text vector max_entries =
if max_entries < 1 then Error.throw <| Illegal_Argument.Error "The `max_entries` parameter must be positive." else
prefix = vector.take (Index_Sub_Range.First max_entries)
prefix = vector.take (..First max_entries)
if prefix.length == vector.length then vector.to_text else
remaining_count = vector.length - prefix.length
remaining_text = if remaining_count == 1 then "and 1 more element" else
Expand Down
Loading
Loading