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)