lineinfos, platform, prefixmatches, pathutils, nimpaths


TOption = enum
  optNone, optObjCheck, optFieldCheck, optRangeCheck, optBoundsCheck,
  optOverflowCheck, optRefCheck, optNaNCheck, optInfCheck, optStaticBoundsCheck,
  optStyleCheck, optAssert, optLineDir, optWarns, optHints, optOptimizeSpeed,
  optOptimizeSize, optStackTrace, optStackTraceMsgs, optLineTrace, optByRef,
  optProfiler, optImplicitStatic, optTrMacros, optMemTracker, optNilSeqs,
  optSinkInference, optCursorInference
Source Edit
TOptions = set[TOption]
Source Edit
TGlobalOption = enum
  gloptNone, optForceFullMake, optWasNimscript, optListCmd, optCompileOnly,
  optNoLinking, optCDebug, optGenDynLib, optGenStaticLib, optGenGuiApp,
  optGenScript, optGenMapping, optRun, optUseNimcache, optStyleHint,
  optStyleError, optStyleUsages, optSkipSystemConfigFile, optSkipProjConfigFile,
  optSkipUserConfigFile, optSkipParentConfigFiles, optNoMain, optUseColors,
  optThreads, optStdout, optThreadAnalysis, optTaintMode, optTlsEmulation,
  optGenIndex, optEmbedOrigSrc, optIdeDebug, optIdeTerse,
  optExcessiveStackTrace, optShowAllMismatches, optWholeProject, optDocInternal,
  optMixedMode, optListFullPaths, optNoNimblePath, optHotCodeReloading,
  optDynlibOverrideAll, optSeqDestructors, optTinyRtti, optOwnedRefs,
  optMultiMethods, optBenchmarkVM, optProduceAsm, optPanics, optNimV1Emulation,
  optNimV12Emulation, optSourcemap, optProfileVM, optEnableDeepCopy
Source Edit
TGlobalOptions = set[TGlobalOption]
Source Edit
TBackend = enum
  backendInvalid = "", backendC = "c", backendCpp = "cpp", backendJs = "js",
  backendObjc = "objc"
Source Edit
TCommands = enum
  cmdNone, cmdCompileToC, cmdCompileToCpp, cmdCompileToOC, cmdCompileToJS,
  cmdCompileToLLVM, cmdInterpret, cmdPretty, cmdDoc, cmdGenDepend, cmdDump,
  cmdCheck, cmdParse, cmdScan, cmdIdeTools, cmdDef, cmdRst2html, cmdRst2tex,
  cmdInteractive, cmdRun, cmdJsonScript, cmdCompileToBackend
Source Edit
TStringSeq = seq[string]
Source Edit
TGCMode = enum
  gcUnselected, gcNone, gcBoehm, gcRegions, gcArc, gcOrc, gcMarkAndSweep,
  gcHooks, gcRefc, gcV2, gcGo
Source Edit
IdeCmd = enum
  ideNone, ideSug, ideCon, ideDef, ideUse, ideDus, ideChk, ideMod, ideHighlight,
  ideOutline, ideKnown, ideMsg, ideProject
Source Edit
Feature = enum
  implicitDeref, dotOperators, callOperator, parallel, destructor, notnil,
  dynamicBindSym, forLoopMacros, caseStmtMacros, codeReordering, compiletimeFFI, ## This requires building nim with `-d:nimHasLibFFI`
                                                                                  ## which itself requires `nimble install libffi`, see #10150
                                                                                  ## Note: this feature can't be localized with {.push.}
  vmopsDanger, strictFuncs, views
experimental features; DO NOT RENAME THESE! Source Edit
LegacyFeature = enum
  allowSemcheckedAstModification, ## Allows to modify a NimNode where the type has already been
                                   ## flagged with nfSem. If you actually do this, it will cause
                                   ## bugs.
  checkUnsignedConversions ## Historically and especially in version 1.0.0 of the language
                           ## conversions to unsigned numbers were checked. In 1.0.4 they
                           ## are not anymore.
Source Edit
SymbolFilesOption = enum
  disabledSf, writeOnlySf, readOnlySf, v2Sf
Source Edit
TSystemCC = enum
  ccNone, ccGcc, ccNintendoSwitch, ccLLVM_Gcc, ccCLang, ccBcc, ccVcc, ccTcc,
  ccEnv, ccIcl, ccIcc, ccClangCl
Source Edit
ExceptionSystem = enum
  excNone, excSetjmp, excCpp, excGoto, excQuirky
Source Edit
CfileFlag {...}{.pure.} = enum
  Cached,                   ## no need to recompile this time
  External                   ## file was introduced via .compile pragma
Source Edit
Cfile = object
  nimname*: string
  cname*, obj*: AbsoluteFile
  flags*: set[CfileFlag]
  customArgs*: string
Source Edit
CfileList = seq[Cfile]
Source Edit
Suggest = ref object
  section*: IdeCmd
  qualifiedPath*: seq[string]
  name*: ptr string
  filePath*: string
  line*: int
  column*: int
  doc*: string
  forth*: string
  quality*: range[0 .. 100]
  isGlobal*: bool
  contextFits*: bool
  prefix*: PrefixMatch
  symkind*: byte
  scope*, localUsages*, globalUsages*: int
  tokenLen*: int
  version*: int
Source Edit
Suggestions = seq[Suggest]
Source Edit
ProfileInfo = object
  time*: float
  count*: int
Source Edit
ProfileData = ref object
  data*: TableRef[TLineInfo, ProfileInfo]
Source Edit
ConfigRef {...}{.acyclic.} = ref object
  backend*: TBackend
  target*: Target
  linesCompiled*: int
  options*: TOptions
  globalOptions*: TGlobalOptions
  macrosToExpand*: StringTableRef
  arcToExpand*: StringTableRef
  m*: MsgConfig
  evalTemplateCounter*: int
  evalMacroCounter*: int
  exitcode*: int8
  cmd*: TCommands
  selectedGC*: TGCMode
  exc*: ExceptionSystem
  verbosity*: int
  numberOfProcessors*: int
  evalExpr*: string
  lastCmdTime*: float
  symbolFiles*: SymbolFilesOption
  cppDefines*: HashSet[string]
  headerFile*: string
  features*: set[Feature]
  legacyFeatures*: set[LegacyFeature]
  arguments*: string         ## the arguments to be passed to the program that
                             ## should be run
  ideCmd*: IdeCmd
  oldNewlines*: bool
  cCompiler*: TSystemCC
  modifiedyNotes*: TNoteKinds
  cmdlineNotes*: TNoteKinds
  foreignPackageNotes*: TNoteKinds
  notes*: TNoteKinds
  warningAsErrors*: TNoteKinds
  mainPackageNotes*: TNoteKinds
  mainPackageId*: int
  errorCounter*: int
  hintCounter*: int
  warnCounter*: int
  errorMax*: int
  maxLoopIterationsVM*: int  ## VM: max iterations of all loops
  configVars*: StringTableRef
  symbols*: StringTableRef   ## We need to use a StringTableRef here as defined
                             ## symbols are always guaranteed to be style
                             ## insensitive. Otherwise hell would break lose.
  packageCache*: StringTableRef
  nimblePaths*: seq[AbsoluteDir]
  searchPaths*: seq[AbsoluteDir]
  lazyPaths*: seq[AbsoluteDir]
  outFile*: RelativeFile
  outDir*: AbsoluteDir
  jsonBuildFile*: AbsoluteFile
  prefixDir*, libpath*, nimcacheDir*: AbsoluteDir
  dllOverrides, moduleOverrides*, cfileSpecificOptions*: StringTableRef
  projectName*: string
  projectPath*: AbsoluteDir
  projectFull*: AbsoluteFile
  projectIsStdin*: bool
  lastMsgWasDot*: bool
  projectMainIdx*: FileIndex
  projectMainIdx2*: FileIndex
  command*: string
  commandArgs*: seq[string]
  commandLine*: string
  extraCmds*: seq[string]
  keepComments*: bool
  implicitImports*: seq[string]
  implicitIncludes*: seq[string]
  docSeeSrcUrl*: string
  docRoot*: string           ## see nim --fullhelp for --docRoot
  docCmd*: string            ## see nim --fullhelp for --docCmd
  cIncludes*: seq[AbsoluteDir]
  cLibs*: seq[AbsoluteDir]
  cLinkedLibs*: seq[string]
  externalToLink*: seq[string]
  linkOptionsCmd*: string
  compileOptionsCmd*: seq[string]
  linkOptions*: string
  compileOptions*: string
  cCompilerPath*: string
  toCompile*: CfileList
  suggestionResultHook*: proc (result: Suggest) {...}{.closure.}
  suggestVersion*: int
  suggestMaxResults*: int
  lastLineInfo*: TLineInfo
  writelnHook*: proc (output: string) {...}{.closure.}
  structuredErrorHook*: proc (config: ConfigRef; info: TLineInfo; msg: string;
                              severity: Severity) {...}{.closure, gcsafe.}
  cppCustomNamespace*: string
  vmProfileData*: ProfileData
every global configuration fields marked with '*' are subject to the incremental compilation mechanisms (+) means "part of the dependency" Source Edit


hasTinyCBackend = false
Source Edit
useEffectSystem = true
Source Edit
useWriteTracking = false
Source Edit
hasFFI = false
Source Edit
copyrightYear = "2021"
Source Edit
harmlessOptions = {optForceFullMake, optNoLinking, optRun, optUseColors,
Source Edit
oldExperimentalFeatures = {implicitDeref, dotOperators, callOperator, parallel}
Source Edit
ChecksOptions = {optObjCheck, optFieldCheck, optRangeCheck, optOverflowCheck,
                 optBoundsCheck, optAssert, optNaNCheck, optInfCheck,
Source Edit
DefaultOptions = {optObjCheck, optFieldCheck, optRangeCheck, optBoundsCheck,
                  optOverflowCheck, optAssert, optWarns, optRefCheck, optHints,
                  optStackTrace, optLineTrace, optTrMacros, optStyleCheck,
Source Edit
DefaultGlobalOptions = {optThreadAnalysis, optExcessiveStackTrace,
Source Edit
genSubDir = r"nimcache"
Source Edit
NimExt = "nim"
Source Edit
RodExt = "rod"
Source Edit
HtmlExt = "html"
Source Edit
JsonExt = "json"
Source Edit
TagsExt = "tags"
Source Edit
TexExt = "tex"
Source Edit
IniExt = "ini"
Source Edit
DefaultConfig = r"nim.cfg"
Source Edit
DefaultConfigNims = r"config.nims"
Source Edit
DocConfig = r"nimdoc.cfg"
Source Edit
DocTexConfig = r"nimdoc.tex.cfg"
Source Edit
htmldocsDir = "htmldocs"
Source Edit
docRootDefault = "@default"
Source Edit
oKeepVariableNames = true
Source Edit


proc assignIfDefault[T](result: var T; val: T; def = default(T))
if result was already assigned to a value (that wasn't def), this is a noop. Source Edit
proc setNoteDefaults(conf: ConfigRef; note: TNoteKind; enabled = true) {...}{.
    raises: [], tags: [].}
Source Edit
proc setNote(conf: ConfigRef; note: TNoteKind; enabled = true) {...}{.raises: [],
    tags: [].}
Source Edit
proc hasHint(conf: ConfigRef; note: TNoteKind): bool {...}{.raises: [], tags: [].}
Source Edit
proc hasWarn(conf: ConfigRef; note: TNoteKind): bool {...}{.inline, raises: [],
    tags: [].}
Source Edit
proc hcrOn(conf: ConfigRef): bool {...}{.raises: [], tags: [].}
Source Edit
proc getDateStr(): string {...}{.raises: [], tags: [ReadEnvEffect, TimeEffect].}
Source Edit
proc getClockStr(): string {...}{.raises: [], tags: [ReadEnvEffect, TimeEffect].}
Source Edit
proc newConfigRef(): ConfigRef {...}{.raises: [], tags: [].}
Source Edit
proc newPartialConfigRef(): ConfigRef {...}{.raises: [], tags: [].}
create a new ConfigRef that is only good enough for error reporting. Source Edit
proc cppDefine(c: ConfigRef; define: string) {...}{.raises: [], tags: [].}
Source Edit
proc isDefined(conf: ConfigRef; symbol: string): bool {...}{.raises: [], tags: [].}
Source Edit
proc importantComments(conf: ConfigRef): bool {...}{.inline, raises: [], tags: [].}
Source Edit
proc usesWriteBarrier(conf: ConfigRef): bool {...}{.inline, raises: [], tags: [].}
Source Edit
proc mainCommandArg(conf: ConfigRef): string {...}{.raises: [], tags: [].}
This is intended for commands like check or parse which will work on the main project file unless explicitly given a specific file argument Source Edit
proc existsConfigVar(conf: ConfigRef; key: string): bool {...}{.raises: [], tags: [].}
Source Edit
proc getConfigVar(conf: ConfigRef; key: string; default = ""): string {...}{.
    raises: [], tags: [].}
Source Edit
proc setConfigVar(conf: ConfigRef; key, val: string) {...}{.raises: [], tags: [].}
Source Edit
proc getOutFile(conf: ConfigRef; filename: RelativeFile; ext: string): AbsoluteFile {...}{.
    raises: [OSError], tags: [].}
Source Edit
proc absOutFile(conf: ConfigRef): AbsoluteFile {...}{.raises: [OSError],
    tags: [ReadDirEffect].}
Source Edit
proc prepareToWriteOutput(conf: ConfigRef): AbsoluteFile {...}{.
    raises: [OSError, IOError], tags: [ReadDirEffect, WriteDirEffect].}
Create the output directory and returns a full path to the output file Source Edit
proc getPrefixDir(conf: ConfigRef): AbsoluteDir {...}{.raises: [],
    tags: [ReadIOEffect].}

Gets the prefix dir, usually the parent directory where the binary resides.

This is overridden by some tools (namely nimsuggest) via the conf.prefixDir field.

This should resolve to root of nim sources, whether running nim from a local
clone or using installed nim, so that these exist: result/doc/advopt.txt

and result/lib/system.nim

Source Edit
proc setDefaultLibpath(conf: ConfigRef) {...}{.raises: [OSError],
    tags: [ReadIOEffect, ReadDirEffect, ReadEnvEffect].}
Source Edit
proc canonicalizePath(conf: ConfigRef; path: AbsoluteFile): AbsoluteFile {...}{.
    raises: [OSError], tags: [ReadDirEffect].}
Source Edit
proc removeTrailingDirSep(path: string): string {...}{.raises: [], tags: [].}
Source Edit
proc disableNimblePath(conf: ConfigRef) {...}{.raises: [], tags: [].}
Source Edit
proc clearNimblePath(conf: ConfigRef) {...}{.raises: [], tags: [].}
Source Edit
proc getNimbleFile(conf: ConfigRef; path: string): string {...}{.raises: [KeyError],
    tags: [ReadDirEffect].}
returns absolute path to nimble file, e.g.: /pathto/cligen.nimble Source Edit
proc getPackageName(conf: ConfigRef; path: string): string {...}{.raises: [KeyError],
    tags: [ReadDirEffect].}
returns nimble package name, e.g.: cligen Source Edit
proc fakePackageName(conf: ConfigRef; path: AbsoluteFile): string {...}{.
    raises: [Exception], tags: [RootEffect].}
Source Edit
proc demanglePackageName(path: string): string {...}{.raises: [], tags: [].}
Source Edit
proc withPackageName(conf: ConfigRef; path: AbsoluteFile): AbsoluteFile {...}{.
    raises: [KeyError, OSError, Exception], tags: [ReadDirEffect, RootEffect].}
Source Edit
proc getNimcacheDir(conf: ConfigRef): AbsoluteDir {...}{.raises: [OSError],
    tags: [ReadEnvEffect, ReadIOEffect].}
Source Edit
proc pathSubs(conf: ConfigRef; p, config: string): string {...}{.
    raises: [ValueError, OSError], tags: [ReadEnvEffect, ReadIOEffect].}
Source Edit
proc toGeneratedFile(conf: ConfigRef; path: AbsoluteFile; ext: string): AbsoluteFile {...}{.
    raises: [OSError], tags: [ReadEnvEffect, ReadIOEffect].}
converts "/home/a/mymodule.nim", "rod" to "/home/a/nimcache/mymodule.rod" Source Edit
proc completeGeneratedFilePath(conf: ConfigRef; f: AbsoluteFile;
                               createSubDir: bool = true): AbsoluteFile {...}{.
    raises: [OSError, IOError], tags: [ReadEnvEffect, ReadIOEffect,
                                       WriteDirEffect, ReadDirEffect,
Source Edit
proc getRelativePathFromConfigPath(conf: ConfigRef; f: AbsoluteFile): RelativeFile {...}{.
    raises: [Exception], tags: [RootEffect].}
Source Edit
proc findFile(conf: ConfigRef; f: string; suppressStdlib = false): AbsoluteFile {...}{.
    raises: [OSError, KeyError], tags: [ReadDirEffect].}
Source Edit
proc findModule(conf: ConfigRef; modulename, currentModule: string): AbsoluteFile {...}{.
    raises: [OSError, KeyError], tags: [ReadDirEffect].}
Source Edit
proc findProjectNimFile(conf: ConfigRef; pkg: string): string {...}{.
    raises: [OSError], tags: [ReadDirEffect].}
Source Edit
proc inclDynlibOverride(conf: ConfigRef; lib: string) {...}{.raises: [], tags: [].}
Source Edit
proc isDynlibOverride(conf: ConfigRef; lib: string): bool {...}{.raises: [], tags: [].}
Source Edit
proc parseIdeCmd(s: string): IdeCmd {...}{.raises: [], tags: [].}
Source Edit
proc `$`(c: IdeCmd): string {...}{.raises: [], tags: [].}
Source Edit
proc floatInt64Align(conf: ConfigRef): int16 {...}{.raises: [], tags: [].}
Returns either 4 or 8 depending on reasons. Source Edit
proc setOutFile(conf: ConfigRef) {...}{.raises: [ValueError], tags: [].}
Source Edit


iterator nimbleSubs(conf: ConfigRef; p: string): string {...}{.raises: [ValueError],
    tags: [].}
Source Edit


template setErrorMaxHighMaybe(conf: ConfigRef)
do not stop after first error (but honor --errorMax if provided) Source Edit
template depConfigFields(fn) {...}{.dirty.}
Source Edit
template newPackageCache(): untyped
Source Edit
template compilationCachePresent(conf: ConfigRef): untyped
Source Edit
template optPreserveOrigSource(conf: ConfigRef): untyped
Source Edit

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.