code: func packageFilenameLine(ld *LineData, depth int) {
  	i, filename, linenum, ok := runtime.Caller(depth)
  	if !ok {
  		return
  	}
  
  	// Strip the directory from the filename. Even on Windows this is slash
  	// delimited. See https://github.com/golang/go/issues/3335.
  	fileParts := strings.Split(filename, "/")
  	ld.SourceFile = fileParts[len(fileParts)-1]
  	ld.SourceLine = linenum
  
  	// Set up params from the call stack.
  	f := runtime.FuncForPC(i)
  	if f == nil {
  		return
  	}
  
  	// generate the separate package name and function name
  	packagePath := strings.Split(f.Name(), "/")
  	n := len(packagePath)
  	pkgFunc := strings.SplitN(packagePath[n-1], ".", 2)
  	if len(pkgFunc) != 2 {
  		return
  	}
  
  	pkg := strings.Join(packagePath[:n-1], "/") + fmt.Sprintf("/%s", pkgFunc[0])
  	ld.CallingPackage = pkg
  	ld.CallingFunction = pkgFunc[1]
  }
docs: // packageFilenameLine updates the LineData to include the package, function,
  // source file, and line number.