Implements #21928
Adds a `--raw` (since thats what the original issue used, suggestions
welcome) switch which stops the jsondoc gen from rendering rst/markdown.
Implemented by making `genComment` check if it needs to return the raw
string or not. This required switching the related procs to using
`Option` to handle how `nil` values were returned before. The `nil`
returns were eventually ignored so just ignoring `none(T)` has the same
effect.
Doesn't support `runnableExamples` since jsondocs doesn't support them
either
(cherry picked from commit c1e381ae8d)
5.2 KiB
v2.x.x - yyyy-mm-dd
Changes affecting backward compatibility
-
-d:nimPreviewFloatRoundtripbecomes the default.system.addFloatandsystem.$now can produce string representations of floating point numbers that are minimal in size and possess round-trip and correct rounding guarantees (via the Dragonbox algorithm). Use-d:nimLegacySprintfto emulate old behaviors. -
The
defaultparameter oftables.getOrDefaulthas been renamed todefto avoid conflicts withsystem.default, so named argument usage for this parameter likegetOrDefault(..., default = ...)will have to be changed. -
With
-d:nimPreviewCheckedClose, theclosefunction in thestd/synciomodule now raises an IO exception in case of an error. -
Unknown warnings and hints now gives warnings
warnUnknownNotesinstead of errors. -
With
-d:nimPreviewAsmSemSymbol, backticked symbols are type checked in theasm/emitstatements. -
The bare
except:now panics onDefect. Useexcept Exception:orexcept Defect:to catchDefect.--legacy:noPanicOnExceptis provided for a transition period. -
With
-d:nimPreviewCStringComparisons, comparsions (<,>,<=,>=) between cstrings switch from reference semantics to value semantics like==and!=. -
std/parsesqlhas been moved to a nimble package, usenimbleoratlasto install it. -
With
-d:nimPreviewDuplicateModuleError, importing two modules that share the same name becomes a compile-time error. This includes importing the same module more than once. Useimport foo as foo1(or other aliases) to avoid collisions. -
Adds the switch
--mangle:nim|cpp, which selectsnimorcppstyle name mangling when used withdebuginfoon, defaults tonim. The default is changed fromcpptonim. -
The second parameter of
succ,pred,inc, anddecinsystemnow acceptsSomeInteger(previouslyOrdinal). -
Bitshift operators (
shl,shr,ashr) now apply bitmasking to the right operand in the C/C++/VM/JS backends.
Standard library additions and changes
-
setutils.symmetricDifferencealong with its operator versionsetutils.`-+-`and in-place versionsetutils.togglehave been added to more efficiently calculate the symmetric difference of bitsets. -
strutils.multiReplaceoverload for character set replacements in a single pass. Useful for string sanitation. Follows existing multiReplace semantics. -
std/filesadds:- Exports
CopyFlagenum andFilePermissiontype for fine-grained control of file operations - New file operation procs with
Pathsupport:getFilePermissions,setFilePermissionsfor managing permissionstryRemoveFilefor file deletioncopyFilewith configurable buffer size and symlink handlingcopyFileWithPermissionsto preserve file attributescopyFileToDirfor copying files into directories
- Exports
-
std/dirsadds:- New directory operation procs with
Pathsupport:copyDirwith special file handling optionscopyDirWithPermissionsto recursively preserve attributes
- New directory operation procs with
-
system.setLenUninitnow supports refc, JS and VM backends.
std/mathThe^symbol now supports floating-point as exponent in addition to the Natural type.min,max, andsequtils'minIndex,maxIndexandminmaxforopenArrays now accept a comparison function.system.substrimplementation now usescopymem(wrapped Cmemcpy) for copying data, if available at compilation.system.newStringUninitis now considered free of side-effects allowing it to be used with--experimental:strictFuncs.
Language changes
-
An experimental option
--experimental:typeBoundOpshas been added that implements the RFC https://github.com/nim-lang/RFCs/issues/380. This makes the behavior of interfaces likehash,$,==etc. more reliable for nominal types across indirect/restricted imports.# objs.nim import std/hashes type Obj* = object x*, y*: int z*: string # to be ignored for equality proc `==`*(a, b: Obj): bool = a.x == b.x and a.y == b.y proc hash*(a: Obj): Hash = $!(hash(a.x) &! hash(a.y))# main.nim {.experimental: "typeBoundOps".} from objs import Obj # objs.hash, objs.`==` not imported import std/tables var t: Table[Obj, int] t[Obj(x: 3, y: 4, z: "debug")] = 34 echo t[Obj(x: 3, y: 4, z: "ignored")] # 34See the experimental manual for more information.
Compiler changes
- Fixed a bug where
sizeof(T)inside atypedesctemplate called from a generic type'swhenclause would error with "'sizeof' requires '.importc' types to be '.completeStruct'". The issue was thathasValuelessStaticsinsemtypinst.nimdidn't recognizetyTypeDesc(tyGenericParam)as an unresolved generic parameter.
Tool changes
- Added
--rawflag when generating JSON docs to not render markup. - Added
--stdinfileflag to name of the file used when running program from stdin (defaults tostdinfile.nim)
Documentation changes
- Added documentation for the
completeStructpragma in the manual.