akhilles
278988d4d3
Add .name attr to interfaces
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
548a3541b0
Remove unused ComponentFactoryValue
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
a8f13c4ec8
Disable path snapshot tests in windows
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
3d52186a45
Sanitize windows temp dir paths
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
1d0f51ad0a
Error on unsupported metadata types
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
c5460aed62
Revert unintentional change
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
2abd3c93d5
Add snapshot tests
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
31af502ceb
Add InputValue ser/de support for metadata container
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
3e009eef80
Add better type checking, switch to method-based API
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
akhilles
129a32b55d
Add metadata()
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:58:07 -04:00
Akhil Velagapudi
ac8434ff42
Board-level configuration ( #188 )
...
* Add `builtin.add_board_config`
Sets constraints
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Enable json extension
Useful for debugging
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* More compact config mapping
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add predefined sizes support to board config
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Make all board config fields optional, add merging
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add netclass support to board config
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add stackup support, sexpr library
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Patch stackup on `pcb layout`
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Sync board config by default
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix deep_merge
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Document board config feature
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Flatten netclasses
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add base configurations
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Remove unused _is_new_board
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Move board_config.zen to examples/
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Use pcb-sexpr
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Replace --dont-sync with --sync (default true)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-29 15:57:15 -04:00
Akhil Velagapudi
632eb6278b
Don't auto-update in CI ( #182 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-23 23:54:13 -04:00
Akhil Velagapudi
d9bfb02551
Unified caching for load(), Module() ( #180 )
...
* Simplify eval error wrapping
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Simply Module() span resolution
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Unified caching for load(), Module()
This simplifies the code and improves the performance substantially.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-23 23:19:39 -04:00
Akhil Velagapudi
dcca0defe8
Add physical value comparison,.with_value() ( #177 )
...
* Add compare, equals support to PhysicalValue
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix inconsistent attr data
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* fixup! Add compare, equals support to PhysicalValue
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add PhysicalValue builtin, add .with_value()
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-23 16:30:19 -07:00
Akhil Velagapudi
83bb82e474
Add canonicalize cache to default file provider ( #179 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-23 18:05:13 -04:00
Akhil Velagapudi
6d1e1893a0
Prioritize new net names over old net names ( #178 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-23 17:47:25 -04:00
Akhil Velagapudi
3145c214ac
Fix unstable ref warning performance regression ( #176 )
...
* Generate unstable ref warnings after cache check
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Don't suppress introspection diagnostics
This is not relevant because we only raise diagnostics once per "load".
So, if introspection does transient loads, those diagnostics will be
forever suppressed if not raised during introspection.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-23 11:01:40 -04:00
Akhil Velagapudi
e00ea920ed
Add support for kicad schematic bom as fallback ( #174 )
...
* Make path optional in board config
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Delete read-only staged files
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Parse kicad schematic bom
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Use last segment of package
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add kicad bom fallback to `pcb bom`
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-22 17:29:36 -04:00
Akhil Velagapudi
9aa712ad66
Fail gracefully when current file has no spec ( #175 )
...
* Fail gracefully when current file has no spec
LSP should never panic. Just propagate the error to the client. This
should just be a transient state. Also, remove redundant file existence
check.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Ignore non-existent paths when vendoring
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-22 17:29:27 -04:00
Akhil Velagapudi
63cfd96660
Parse lowercase "hz" as Hertz ( #172 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-22 09:51:35 -04:00
Akhil Velagapudi
332128e034
Make load(), Module() case-sensitive ( #169 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-21 15:05:08 -04:00
Lenny Khazan
bd642654d6
pcb vendor --ignore-errors (#170 )
...
* `pcb vendor --ignore-errors`
* update snapshot
2025-09-21 14:44:19 -04:00
Akhil Velagapudi
5ad3c7effb
[ENG-1] Add language-level physical values to do math ( #161 )
...
* Add PhysicalValue Rust + Starlark types
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add more units
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add Voltage
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add physical value math
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Moar units
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Macroify
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Moar unit math stuff
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Move define_physical_unit macros
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add physical relationship tests
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add __str__
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Parse celsius, fahrenheit temps
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Hijack units.zen and swap with builtins
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add builtin
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* For unsupported ops, output dimensionless
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix starlark-rust dep
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix __str__ type annotation
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Remove unused record fields
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Remove unused imports in tests/path.rs
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add physical value to schematic
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Make physical value str conv lossless
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add back __{}__ typed properties in pcb
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix tests
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add with_tolerance, with_unit
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add physical value <> string math
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Allow all bin ops on custom type
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Parse "ohms"
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add dimensioned units
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add dimensionless casting, allow with_unit(None)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Allow constructing physical value with just number pos arg
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Bump starlark-rust
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-19 17:12:41 -04:00
Akhil Velagapudi
7337a1cc57
Mark files as read-only when vendoring ( #166 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-19 15:36:55 -04:00
Akhil Velagapudi
654e66ca48
Standardize file walking in all pcb subcommands ( #164 )
...
* Ignore vendor/ dir in pcb fmt
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Standardize file walking
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-19 14:40:01 -04:00
Diode Robot
fc990625c0
Add kicad version to metadata.json ( #163 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
Co-authored-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-19 13:11:40 -04:00
Akhil Velagapudi
132a9cb68c
Don't add prefix to old net names ( #162 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-19 11:50:48 -04:00
Akhil Velagapudi
dceb75b5f3
Generate warnings if Path() paths don't exist ( #160 )
...
* Add Path() to spec
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Raise warning if path does not exist
Related to DIO-375.
Even if the path doesn't exist during initial development, it should not
be checked into the registry in this state.
We can run registry CI with -Dwarnings to catch this.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Generate warnings if Path() paths don't exist
Even if allow_not_exists, warnings are useful (DIO-375).
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Release should fail if path missing
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-16 18:12:38 -04:00
Akhil Velagapudi
5b6824f223
Add board_name to metadata.json ( #159 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-16 13:24:56 -04:00
Akhil Velagapudi
8e9c355a3f
Disallow dots in names ( #150 )
...
* Disallow dots in names
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Bump stdlib
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Simplify is_instance_position
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update snapshot
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-15 18:06:28 -04:00
Diode Robot
13f9f480e8
Bump axoupdater to 0.9 ( #157 )
...
cargo-dist fails if it's out of date:
https://github.com/diodeinc/pcb/actions/runs/17744277736/job/50425561145 .
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
Co-authored-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-15 15:45:17 -04:00
Lenny Khazan
ace6984ecd
Always include all layout logs ( #156 )
2025-09-15 15:29:45 -04:00
Akhil Velagapudi
aec6b8f083
Fix bug where orphaned nets were filtered out ( #154 )
...
* Don't filter out orphaned nets
They're still needed for resolving positions, net renames.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Use scoped key to do remapping
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-15 15:07:07 -04:00
Akhil Velagapudi
d5a2bc10e0
Revert #144 , use moved() ( #153 )
...
* Revert "Revert net naming changes (#144 )"
This reverts commit 51e5066276 .
* Don't change net name prefix case
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Register moved() directives for new net names
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Dedup get_component_prefix
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Don't change case of net names
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update netlist tests
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Skip warnings for auto-generated directives
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-14 22:14:19 -04:00
Akhil Velagapudi
bb0898dbef
Add moved() directive ( #152 )
...
* Add pcb:sch comments to test board
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add moved() directive
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Include moved paths in Schematic
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Repair footprints, groups in layout
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Update docs
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Compute remapper data *before* processing positions
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add warnings if old path exists or new path doesn't
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add snapshot tests for moved()
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-14 21:15:37 -04:00
Akhil Velagapudi
f4359ca00e
Parse position data, include it in netlist ( #151 )
...
* Include position data in netlist
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add snapshot tests of netlist pos data
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Switch to symbol positions
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-12 10:44:44 -04:00
Akhil Velagapudi
63c3ab1127
Auto update pcb ( #149 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-11 15:03:07 -04:00
Akhil Velagapudi
0745f379c7
Add pcb sch position loading/saving to wasm, lsp ( #147 )
...
* Add pcb sch position loading/saving to wasm, lsp
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Fix ordering
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-10 14:08:00 -04:00
Akhil Velagapudi
03b8792d8c
[DIO-367] Validate net, interface, component, module names ( #148 )
...
* Validate net, interface, component, module names
Don't allow whitespace or special characters.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Allow dots for now
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-10 14:04:25 -04:00
Akhil Velagapudi
0760ecaec4
Add basic BOM matching API ( #145 )
...
* Add EvalConfig, reuse pcb_zen::eval
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add Bom struct with multiple views
This also limits the public API of Bom to just json() and
ungrouped_json().
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add bom rule matching
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add basic BOM matching API
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Address PR comments
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add multiple offers to matching rule
Also added package to matching key
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add matched_by, make package required
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-09 00:24:55 -04:00
Akhil Velagapudi
0ca2f604ba
Replace buildifier with ruff fmt ( #146 )
...
buildifier doesn't support f-strings, which we use in a bunch of places.
We also run fmt after `pcb upgrade`, and it's a bit annoying that it
fails due to a buildifier error.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-08 23:22:10 -04:00
Akhil Velagapudi
51e5066276
Revert net naming changes ( #144 )
...
* Revert "Don't suffix field net name for single-net instances (#140 )"
This reverts commit 1742334863 .
* Revert "Fix hierarchical net naming (#135 )"
This reverts commit 23cca690a8 .
2025-09-06 17:31:25 -04:00
Akhil Velagapudi
19062d9d56
Build test release on pcb tag ( #142 )
...
Also build with -Dwarnings in `pcb release`
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-05 23:15:44 -04:00
Akhil Velagapudi
dbc3ab31e6
Make pcb tag and pcb release consistent ( #139 )
...
* Make pcb tag and pcb release consistent
Before:
pcb tag --board <BOARD> --version <VERSION> [PATH]
pcb release <zen_path> # inconsistent - used file path
After:
pcb tag --board <BOARD> --version <VERSION> [PATH]
pcb release --board <BOARD> [PATH] # now consistent
Also, prefix the board name so that the folders + zip file names are
easier to grok.
Before:
- Staging: .pcb/releases/MyBoard/v1.0.0/
- Zip: .pcb/releases/MyBoard/v1.0.0.zip (just v1.0.0.zip, not MyBoard.v1.0.0.zip)
After:
- Staging: .pcb/releases/MyBoard-v1.0.0/
- Zip: .pcb/releases/MyBoard-v1.0.0.zip
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Add find_board_by_name method
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Only print structured data to stdout
Only print json if -f json. Print human-friendly table otherwise.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-05 22:44:14 -04:00
Akhil Velagapudi
ec94b7e6dd
Sync orphaned zones, vias, polygons ( #141 )
...
* Sync orphaned zones, vias, polygons
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Ruff format
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-05 17:21:17 -04:00
Akhil Velagapudi
1742334863
Don't suffix field net name for single-net instances ( #140 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-05 10:56:57 -04:00
Lenny Khazan
8f05091665
Fail pcb test with non-0 exit code if build fails ( #138 )
...
* Fail `pcb test` with non-0 exit code if build fails
* clippy
2025-09-04 23:47:21 -04:00
Akhil Velagapudi
23cca690a8
Fix hierarchical net naming ( #135 )
...
* Fix hierarchical net naming
Remove spurious net name deduplication.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
* Dedup field processing, net allocation, interface validation
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-04 22:42:00 -04:00
Akhil Velagapudi
0ee48ef792
Require --board in pcb tag ( #136 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-04 22:31:10 -04:00
Akhil Velagapudi
4d6f9a91f5
Include docs/ in release artifacts ( #137 )
...
Signed-off-by: akhilles <akhilvelagapudi@gmail.com >
2025-09-04 22:31:01 -04:00