github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/cue/load/package.go (about)

     1  // Copyright 2018 The CUE Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package load
    16  
    17  import (
    18  	"unicode/utf8"
    19  )
    20  
    21  // Package rules:
    22  //
    23  // - the package clause defines a namespace.
    24  // - a cue file without a package clause is a standalone file.
    25  // - all files with the same package name within a directory and its
    26  //   ancestor directories up to the package root belong to the same package.
    27  // - The package root is either the top of the file hierarchy or the first
    28  //   directory in which a cue.mod file is defined.
    29  //
    30  // The contents of a namespace depends on the directory that is selected as the
    31  // starting point to load a package. An instance defines a package-directory
    32  // pair.
    33  
    34  // safeArg reports whether arg is a "safe" command-line argument,
    35  // meaning that when it appears in a command-line, it probably
    36  // doesn't have some special meaning other than its own name.
    37  // Obviously args beginning with - are not safe (they look like flags).
    38  // Less obviously, args beginning with @ are not safe (they look like
    39  // GNU binutils flagfile specifiers, sometimes called "response files").
    40  // To be conservative, we reject almost any arg beginning with non-alphanumeric ASCII.
    41  // We accept leading . _ and / as likely in file system paths.
    42  // There is a copy of this function in cmd/compile/internal/gc/noder.go.
    43  func safeArg(name string) bool {
    44  	if name == "" {
    45  		return false
    46  	}
    47  	c := name[0]
    48  	return '0' <= c && c <= '9' || 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || c == '.' || c == '_' || c == '/' || c >= utf8.RuneSelf
    49  }