github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/go/build/constraint/expr.go (about) 1 // Copyright 2020 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package constraintはビルド制約行の解析と評価を実装しています。 6 // ビルド制約自体のドキュメントについては、https://golang.org/cmd/go/#hdr-Build_constraintsを参照してください。 7 // 8 // このパッケージは、オリジナルの「// +build」構文と、Go 1.17で追加された「//go:build」構文の両方を解析します。 9 // 「//go:build」構文の詳細については、https://golang.org/design/draft-gobuildを参照してください。 10 package constraint 11 12 // Exprはビルドタグの制約式です。 13 // 内部の具体的な型は*[AndExpr]、*[OrExpr]、*[NotExpr]、または*[TagExpr] です。 14 type Expr interface { 15 String() string 16 17 Eval(ok func(tag string) bool) bool 18 19 isExpr() 20 } 21 22 // TagExprは、単一のタグTagのための [Expr] です。 23 type TagExpr struct { 24 Tag string 25 } 26 27 func (x *TagExpr) Eval(ok func(tag string) bool) bool 28 29 func (x *TagExpr) String() string 30 31 // NotExprは式!X(Xの否定)を表します。 32 type NotExpr struct { 33 X Expr 34 } 35 36 func (x *NotExpr) Eval(ok func(tag string) bool) bool 37 38 func (x *NotExpr) String() string 39 40 // AndExprは式X && Yを表します。 41 type AndExpr struct { 42 X, Y Expr 43 } 44 45 func (x *AndExpr) Eval(ok func(tag string) bool) bool 46 47 func (x *AndExpr) String() string 48 49 // OrExprはX || Yを表します。 50 type OrExpr struct { 51 X, Y Expr 52 } 53 54 func (x *OrExpr) Eval(ok func(tag string) bool) bool 55 56 func (x *OrExpr) String() string 57 58 // SyntaxErrorは解析されたビルド式の構文エラーを報告します。 59 type SyntaxError struct { 60 Offset int 61 Err string 62 } 63 64 func (e *SyntaxError) Error() string 65 66 // Parseは、形式「//go:build ...」または「// +build ...」の単一のビルド制約行を解析し、対応するブール式を返します。 67 func Parse(line string) (Expr, error) 68 69 // IsGoBuildは、テキストの行が「//go:build」の制約であるかどうかを報告します。 70 // これは、テキストのプレフィックスのみをチェックし、式自体の解析は行いません。 71 func IsGoBuild(line string) bool 72 73 // IsPlusBuildはテキストの行が "// +build" 制約であるかどうかを報告します。 74 // これはテキストの接頭辞のみをチェックし、式そのものの解析は行いません。 75 func IsPlusBuild(line string) bool 76 77 // PlusBuildLinesはビルド式xに評価される「// +build」の行のシーケンスを返します。 78 // 式が直接「// +build」の行に変換できるほど複雑でない場合、PlusBuildLinesはエラーを返します。 79 func PlusBuildLines(x Expr) ([]string, error)