unison-core1-0.0.0
Safe HaskellSafe-Inferred
LanguageHaskell2010

Unison.Project

Description

Projects.

The syntax-related parsing code (what makes a valid project name, etc) could conceivably be moved into a different package, but for now we have just defined the one blessed project/branch name syntax that we allow.

Synopsis

Documentation

data ProjectName #

The name of a project.

Instances

Instances details
Generic ProjectName 
Instance details

Defined in Unison.Core.Project

Associated Types

type Rep ProjectName :: Type -> Type #

Show ProjectName 
Instance details

Defined in Unison.Core.Project

Eq ProjectName 
Instance details

Defined in Unison.Core.Project

Ord ProjectName 
Instance details

Defined in Unison.Core.Project

From ProjectName Text Source # 
Instance details

Defined in Unison.Project

Methods

from :: ProjectName -> Text #

TryFrom Text ProjectName Source # 
Instance details

Defined in Unison.Project

TryFrom Text (These ProjectName ProjectBranchName) Source # 
Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch ProjectName ProjectBranchName) Source #

Attempt to parse a project and branch name from a string where both are required.

Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch ProjectName (Maybe ProjectBranchName)) Source # 
Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch ProjectName (Maybe ProjectBranchNameOrLatestRelease)) Source # 
Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch (Maybe ProjectName) ProjectBranchName) Source # 
Instance details

Defined in Unison.Project

From (These ProjectName ProjectBranchName) Text Source # 
Instance details

Defined in Unison.Project

From (ProjectAndBranch ProjectName ProjectBranchName) Text Source # 
Instance details

Defined in Unison.Project

From (ProjectAndBranch ProjectName (Maybe ProjectBranchName)) Text Source #

project/branch syntax, where the branch is optional.

Instance details

Defined in Unison.Project

From (ProjectAndBranch (Maybe ProjectName) ProjectBranchName) Text Source #

project/branch syntax, where the project is optional. The branch can optionally be preceded by a forward slash.

Instance details

Defined in Unison.Project

type Rep ProjectName 
Instance details

Defined in Unison.Core.Project

type Rep ProjectName = D1 ('MetaData "ProjectName" "Unison.Core.Project" "unison-core-0.0.0-7TTEaGpY3e79hYDTKjX5dL" 'True) (C1 ('MetaCons "UnsafeProjectName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

projectNameUserSlug :: ProjectName -> Maybe Text Source #

Get the user slug at the beginning of a project name, if there is one.

>>> projectNameUserSlug "@arya/lens"
Just "arya"
>>> projectNameUserSlug "lens"
Nothing

projectNameToUserProjectSlugs :: ProjectName -> (Text, Text) Source #

Parse a "@arya/lens" into the "arya" and "lens" parts.

If there's no "arya" part, returns the empty string there.

>>> projectNameToUserProjectSlugs (UnsafeProjectName "@arya/lens")
("arya","lens")
>>> projectNameToUserProjectSlugs (UnsafeProjectName "lens")
("","lens")

prependUserSlugToProjectName :: Text -> ProjectName -> ProjectName Source #

Prepend a user slug to a project name, if it doesn't already have one.

>>> prependUserSlugToProjectName "arya" "lens"
"@arya/lens"
>>> prependUserSlugToProjectName "runar" "@unison/base"
"@unison/base"
>>> prependUserSlugToProjectName "???invalid???" "@unison/base"
"@unison/base"

data ProjectBranchName #

The name of a branch of a project.

Instances

Instances details
Generic ProjectBranchName 
Instance details

Defined in Unison.Core.Project

Associated Types

type Rep ProjectBranchName :: Type -> Type #

Show ProjectBranchName 
Instance details

Defined in Unison.Core.Project

Eq ProjectBranchName 
Instance details

Defined in Unison.Core.Project

Ord ProjectBranchName 
Instance details

Defined in Unison.Core.Project

From ProjectBranchName Text Source # 
Instance details

Defined in Unison.Project

TryFrom Text ProjectBranchName Source # 
Instance details

Defined in Unison.Project

TryFrom Text (These ProjectName ProjectBranchName) Source # 
Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch ProjectName ProjectBranchName) Source #

Attempt to parse a project and branch name from a string where both are required.

Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch ProjectName (Maybe ProjectBranchName)) Source # 
Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch (Maybe ProjectName) ProjectBranchName) Source # 
Instance details

Defined in Unison.Project

From (These ProjectName ProjectBranchName) Text Source # 
Instance details

Defined in Unison.Project

From (ProjectAndBranch ProjectName ProjectBranchName) Text Source # 
Instance details

Defined in Unison.Project

From (ProjectAndBranch ProjectName (Maybe ProjectBranchName)) Text Source #

project/branch syntax, where the branch is optional.

Instance details

Defined in Unison.Project

From (ProjectAndBranch (Maybe ProjectName) ProjectBranchName) Text Source #

project/branch syntax, where the project is optional. The branch can optionally be preceded by a forward slash.

Instance details

Defined in Unison.Project

type Rep ProjectBranchName 
Instance details

Defined in Unison.Core.Project

type Rep ProjectBranchName = D1 ('MetaData "ProjectBranchName" "Unison.Core.Project" "unison-core-0.0.0-7TTEaGpY3e79hYDTKjX5dL" 'True) (C1 ('MetaCons "UnsafeProjectBranchName" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

projectBranchNameUserSlug :: ProjectBranchName -> Maybe Text Source #

Get the user slug at the beginning of a project branch name, if there is one.

>>> projectBranchNameUserSlug "@arya/topic"
Just "arya"
>>> projectBranchNameUserSlug "topic"
Nothing

data ProjectBranchNameKind Source #

Though a branch name is just a flat string, we have logic that handles certain strings specially.

A branch's name indicates it is exactly one of the following:

  • A contributor branch like "@arya/topic"
  • A draft release branch like "releasesdrafts1.2.3"
  • A release branch like "releases/1.2.3"
  • None of the above, like "topic"

Note these classifications are only tied to the branch's (mutable) name, and are not really otherwise indicative of much.

For instance,

  • The existence of a local "releases/1.2.3" branch does not necessarily imply the existence of some remote release version "1.2.3".
  • The existence of a local "arya/topic branch does not necessarily imply the existence of some remote "arya" user made some "topic" branch at some point.

That said, we do try to make the system mostly make sense by rejecting certain inputs (e.g. you should not be able to easily create a local branch called "releases/1.2.3" out of thin air; you should have to clone it from somewhere). But ultimately, again, branch names are best thought of as opaque, flat strings.

classifyProjectBranchName :: ProjectBranchName -> ProjectBranchNameKind Source #

Classify a project branch name.

>>> classifyProjectBranchName "@arya/topic"
Contributor "arya" "topic"
>>> classifyProjectBranchName "releases/drafts/1.2.3"
DraftRelease (Semver 1 2 3)
>>> classifyProjectBranchName "releases/1.2.3"
Release (Semver 1 2 3)
>>> classifyProjectBranchName "topic"
NothingSpecial

data ProjectAndBranch a b #

A generic data structure that contains information about a project and a branch in that project.

Constructors

ProjectAndBranch 

Fields

Instances

Instances details
Bifoldable ProjectAndBranch 
Instance details

Defined in Unison.Core.Project

Methods

bifold :: Monoid m => ProjectAndBranch m m -> m #

bifoldMap :: Monoid m => (a -> m) -> (b -> m) -> ProjectAndBranch a b -> m #

bifoldr :: (a -> c -> c) -> (b -> c -> c) -> c -> ProjectAndBranch a b -> c #

bifoldl :: (c -> a -> c) -> (c -> b -> c) -> c -> ProjectAndBranch a b -> c #

Bifunctor ProjectAndBranch 
Instance details

Defined in Unison.Core.Project

Methods

bimap :: (a -> b) -> (c -> d) -> ProjectAndBranch a c -> ProjectAndBranch b d #

first :: (a -> b) -> ProjectAndBranch a c -> ProjectAndBranch b c #

second :: (b -> c) -> ProjectAndBranch a b -> ProjectAndBranch a c #

Bitraversable ProjectAndBranch 
Instance details

Defined in Unison.Core.Project

Methods

bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> ProjectAndBranch a b -> f (ProjectAndBranch c d) #

TryFrom Text (ProjectAndBranch ProjectName ProjectBranchName) Source #

Attempt to parse a project and branch name from a string where both are required.

Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch ProjectName (Maybe ProjectBranchName)) Source # 
Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch ProjectName (Maybe ProjectBranchNameOrLatestRelease)) Source # 
Instance details

Defined in Unison.Project

TryFrom Text (ProjectAndBranch (Maybe ProjectName) ProjectBranchName) Source # 
Instance details

Defined in Unison.Project

Functor (ProjectAndBranch a) 
Instance details

Defined in Unison.Core.Project

Methods

fmap :: (a0 -> b) -> ProjectAndBranch a a0 -> ProjectAndBranch a b #

(<$) :: a0 -> ProjectAndBranch a b -> ProjectAndBranch a a0 #

Generic (ProjectAndBranch a b) 
Instance details

Defined in Unison.Core.Project

Associated Types

type Rep (ProjectAndBranch a b) :: Type -> Type #

(Show a, Show b) => Show (ProjectAndBranch a b) 
Instance details

Defined in Unison.Core.Project

(Eq a, Eq b) => Eq (ProjectAndBranch a b) 
Instance details

Defined in Unison.Core.Project

From (ProjectAndBranch ProjectName ProjectBranchName) Text Source # 
Instance details

Defined in Unison.Project

From (ProjectAndBranch ProjectName (Maybe ProjectBranchName)) Text Source #

project/branch syntax, where the branch is optional.

Instance details

Defined in Unison.Project

From (ProjectAndBranch (Maybe ProjectName) ProjectBranchName) Text Source #

project/branch syntax, where the project is optional. The branch can optionally be preceded by a forward slash.

Instance details

Defined in Unison.Project

type Rep (ProjectAndBranch a b) 
Instance details

Defined in Unison.Core.Project

type Rep (ProjectAndBranch a b) = D1 ('MetaData "ProjectAndBranch" "Unison.Core.Project" "unison-core-0.0.0-7TTEaGpY3e79hYDTKjX5dL" 'False) (C1 ('MetaCons "ProjectAndBranch" 'PrefixI 'True) (S1 ('MetaSel ('Just "project") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: S1 ('MetaSel ('Just "branch") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 b)))

fullyQualifiedProjectAndBranchNamesParser :: Parsec Void Text (ProjectAndBranch ProjectName ProjectBranchName) Source #

Parse a fully specified myproject/mybranch name.

>>> import Text.Megaparsec (parseMaybe)
>>> parseMaybe fullyQualifiedProjectAndBranchNamesParser ("myproject/mybranch" :: Text)
Just (ProjectAndBranch {project = UnsafeProjectName "myproject", branch = UnsafeProjectBranchName "mybranch"})

data ProjectAndBranchNames Source #

Sometimes, it's convenient (to users) if we defer interpreting certain names (like "foo") as a project name or branch name, instead leaving it up to a command handler to handle the ambiguity.

For example, we might want "switch foo" to switch to either the project "foo", or the branch "foo", or complain if both exist.

This type is useful for those situtations.

Semver

data Semver Source #

Constructors

Semver !Int !Int !Int 

Instances

Instances details
Show Semver Source # 
Instance details

Defined in Unison.Project

Eq Semver Source # 
Instance details

Defined in Unison.Project

Methods

(==) :: Semver -> Semver -> Bool #

(/=) :: Semver -> Semver -> Bool #

From Semver Text Source # 
Instance details

Defined in Unison.Project

Methods

from :: Semver -> Text #

TryFrom Text Semver Source # 
Instance details

Defined in Unison.Project

Orphan instances

From ProjectBranchName Text Source # 
Instance details

From ProjectName Text Source # 
Instance details

Methods

from :: ProjectName -> Text #

TryFrom Text ProjectBranchName Source # 
Instance details

TryFrom Text ProjectName Source # 
Instance details

TryFrom Text (These ProjectName ProjectBranchName) Source # 
Instance details

TryFrom Text (ProjectAndBranch ProjectName ProjectBranchName) Source #

Attempt to parse a project and branch name from a string where both are required.

Instance details

TryFrom Text (ProjectAndBranch ProjectName (Maybe ProjectBranchName)) Source # 
Instance details

TryFrom Text (ProjectAndBranch (Maybe ProjectName) ProjectBranchName) Source # 
Instance details

From (These ProjectName ProjectBranchName) Text Source # 
Instance details

From (ProjectAndBranch ProjectName ProjectBranchName) Text Source # 
Instance details

From (ProjectAndBranch ProjectName (Maybe ProjectBranchName)) Text Source #

project/branch syntax, where the branch is optional.

Instance details

From (ProjectAndBranch (Maybe ProjectName) ProjectBranchName) Text Source #

project/branch syntax, where the project is optional. The branch can optionally be preceded by a forward slash.

Instance details