| // Copyright 2023 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package versions |
| |
| // This file contains predicates for working with file versions to |
| // decide when a tool should consider a language feature enabled. |
| |
| // GoVersions that features in x/tools can be gated to. |
| const ( |
| Go1_18 = "go1.18" |
| Go1_19 = "go1.19" |
| Go1_20 = "go1.20" |
| Go1_21 = "go1.21" |
| Go1_22 = "go1.22" |
| ) |
| |
| // Future is an invalid unknown Go version sometime in the future. |
| // Do not use directly with Compare. |
| const Future = "" |
| |
| // AtLeast reports whether the file version v comes after a Go release. |
| // |
| // Use this predicate to enable a behavior once a certain Go release |
| // has happened (and stays enabled in the future). |
| func AtLeast(v, release string) bool { |
| if v == Future { |
| return true // an unknown future version is always after y. |
| } |
| return Compare(Lang(v), Lang(release)) >= 0 |
| } |
| |
| // Before reports whether the file version v is strictly before a Go release. |
| // |
| // Use this predicate to disable a behavior once a certain Go release |
| // has happened (and stays enabled in the future). |
| func Before(v, release string) bool { |
| if v == Future { |
| return false // an unknown future version happens after y. |
| } |
| return Compare(Lang(v), Lang(release)) < 0 |
| } |