Skip to content

Commit

Permalink
Merge pull request #17 from ShiboSoftwareDev/main
Browse files Browse the repository at this point in the history
refactored to circuit-json
  • Loading branch information
ShiboSoftwareDev authored Oct 10, 2024
2 parents b359434 + 8896137 commit 2ac5427
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 51 deletions.
26 changes: 24 additions & 2 deletions .github/workflows/formatbot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,19 @@ jobs:
if: github.event.pull_request.draft == false

steps:
- name: Determine if fork
id: check_fork
run: |
if [ "${{ github.event.pull_request.head.repo.full_name }}" = "${{ github.repository }}" ]; then
echo "is_fork=false" >> $GITHUB_OUTPUT
else
echo "is_fork=true" >> $GITHUB_OUTPUT
fi
- name: Checkout code
uses: actions/checkout@v3
with:
token: ${{ secrets.TSCIRCUIT_BOT_GITHUB_TOKEN }}
token: ${{ steps.check_fork.outputs.is_fork == 'true' && secrets.GITHUB_TOKEN || secrets.TSCIRCUIT_BOT_GITHUB_TOKEN }}

- name: Setup Node.js
uses: actions/setup-node@v3
Expand All @@ -28,10 +37,23 @@ jobs:
- name: Install @biomejs/biome
run: npm install @biomejs/biome@${{ steps.get-biome-version.outputs.BIOME_VERSION }}

- name: Run formatter
- name: Run Formatter and autofix
if: steps.check_fork.outputs.is_fork == 'false'
run: npx @biomejs/biome format . --write

- name: Format Check (cannot autofix against forks)
if: steps.check_fork.outputs.is_fork == 'true'
run: npx @biomejs/biome format .

- name: Restore lock files
if: steps.check_fork.outputs.is_fork == 'false'
run: |
git checkout -- *lock.json || true
git checkout -- *.lock || true
git checkout -- *.lockb || true
- name: Commit changes
if: steps.check_fork.outputs.is_fork == 'false'
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: "formatbot: Automatically format code"
Expand Down
Binary file modified bun.lockb
Binary file not shown.
20 changes: 9 additions & 11 deletions lib/add-start-and-end-port-ids-if-missing.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import type {
PCBPort,
PCBTrace,
SourceTrace,
AnySoupElement,
PCBTraceError,
PCBSMTPad,
} from "@tscircuit/soup"
PcbPort,
PcbTrace,
AnyCircuitElement,
PcbSmtPad,
} from "circuit-json"

function distance(x1: number, y1: number, x2: number, y2: number): number {
return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
Expand All @@ -16,13 +14,13 @@ function distance(x1: number, y1: number, x2: number, y2: number): number {
* https://github.com/tscircuit/tscircuit/issues/291
*/
export const addStartAndEndPortIdsIfMissing = (
soup: AnySoupElement[],
soup: AnyCircuitElement[],
): void => {
const pcbPorts: PCBPort[] = soup.filter((item) => item.type === "pcb_port")
const pcbSmtPads: PCBSMTPad[] = soup.filter(
const pcbPorts: PcbPort[] = soup.filter((item) => item.type === "pcb_port")
const pcbSmtPads: PcbSmtPad[] = soup.filter(
(item) => item.type === "pcb_smtpad",
)
const pcbTraces: PCBTrace[] = soup.filter((item) => item.type === "pcb_trace")
const pcbTraces: PcbTrace[] = soup.filter((item) => item.type === "pcb_trace")

function findPortIdOverlappingPoint(
point: {
Expand Down
22 changes: 11 additions & 11 deletions lib/check-each-pcb-port-connected.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import type {
PCBPort,
PCBTrace,
PcbPort,
PcbTrace,
SourceTrace,
AnySoupElement,
PCBTraceError,
} from "@tscircuit/soup"
AnyCircuitElement,
PcbTraceError,
} from "circuit-json"
import { addStartAndEndPortIdsIfMissing } from "./add-start-and-end-port-ids-if-missing"
import { getReadableNameForPcbPort } from "@tscircuit/soup-util"

function checkEachPcbPortConnected(soup: AnySoupElement[]): PCBTraceError[] {
function checkEachPcbPortConnected(soup: AnyCircuitElement[]): PcbTraceError[] {
addStartAndEndPortIdsIfMissing(soup)
const pcbPorts: PCBPort[] = soup.filter((item) => item.type === "pcb_port")
const pcbTraces: PCBTrace[] = soup.filter((item) => item.type === "pcb_trace")
const pcbPorts: PcbPort[] = soup.filter((item) => item.type === "pcb_port")
const pcbTraces: PcbTrace[] = soup.filter((item) => item.type === "pcb_trace")
const sourceTraces: SourceTrace[] = soup.filter(
(item) => item.type === "source_trace",
)
const errors: PCBTraceError[] = []
const errors: PcbTraceError[] = []

for (const port of pcbPorts) {
const connectedTraces = pcbTraces.filter((trace) =>
Expand All @@ -36,12 +36,12 @@ function checkEachPcbPortConnected(soup: AnySoupElement[]): PCBTraceError[] {

if (connectedTraces.length === 0 && hasSourceTraceWithConnections) {
errors.push({
type: "pcb_error",
type: "pcb_trace_error",
message: `pcb_trace_error: PCB port ${getReadableNameForPcbPort(soup, port.pcb_port_id)} is not connected by a PCB trace`,
source_trace_id: sourceTrace.source_trace_id,
error_type: "pcb_trace_error",
pcb_trace_id: "",
pcb_error_id: "", // Add appropriate ID generation if necessary
pcb_trace_error_id: "",
pcb_component_ids: [],
pcb_port_ids: [port.pcb_port_id],
})
Expand Down
45 changes: 22 additions & 23 deletions lib/check-each-pcb-trace-non-overlapping.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import type {
PCBTrace,
PCBSMTPad,
AnySoupElement,
PCBTraceError,
} from "@tscircuit/soup"
import { NetManager } from "./net-manager"
PcbTrace,
PcbSmtPad,
AnyCircuitElement,
PcbTraceError,
} from "circuit-json"
import { addStartAndEndPortIdsIfMissing } from "./add-start-and-end-port-ids-if-missing"
import Debug from "debug"
import { su, getReadableNameForElement } from "@tscircuit/soup-util"
import { getReadableNameForElement } from "@tscircuit/soup-util"
import { getFullConnectivityMapFromCircuitJson } from "circuit-json-to-connectivity-map"

const debug = Debug("tscircuit:checks:check-each-pcb-trace-non-overlapping")
Expand Down Expand Up @@ -36,8 +35,8 @@ function lineIntersects(
}

function tracesOverlap(
trace1: PCBTrace,
trace2: PCBTrace,
trace1: PcbTrace,
trace2: PcbTrace,
): { x: number; y: number } | false {
for (let i = 0; i < trace1.route.length - 1; i++) {
for (let j = 0; j < trace2.route.length - 1; j++) {
Expand Down Expand Up @@ -75,7 +74,7 @@ function tracesOverlap(
return false
}

function traceOverlapsWithPad(trace: PCBTrace, pad: PCBSMTPad): boolean {
function traceOverlapsWithPad(trace: PcbTrace, pad: PcbSmtPad): boolean {
for (let i = 0; i < trace.route.length - 1; i++) {
const seg1 = trace.route[i]
const seg2 = trace.route[i + 1]
Expand Down Expand Up @@ -140,7 +139,7 @@ function traceOverlapsWithPad(trace: PCBTrace, pad: PCBSMTPad): boolean {
return false
}

function getPcbPortIdsConnectedToTrace(trace: PCBTrace) {
function getPcbPortIdsConnectedToTrace(trace: PcbTrace) {
const connectedPcbPorts = new Set<string>()
for (const segment of trace.route) {
if (segment.route_type === "wire") {
Expand All @@ -154,7 +153,7 @@ function getPcbPortIdsConnectedToTrace(trace: PCBTrace) {
return Array.from(connectedPcbPorts)
}

function getPcbPortIdsConnectedToTraces(traces: PCBTrace[]) {
function getPcbPortIdsConnectedToTraces(traces: PcbTrace[]) {
const connectedPorts = new Set<string>()
for (const trace of traces) {
for (const portId of getPcbPortIdsConnectedToTrace(trace)) {
Expand All @@ -165,17 +164,17 @@ function getPcbPortIdsConnectedToTraces(traces: PCBTrace[]) {
}

function checkEachPcbTraceNonOverlapping(
soup: AnySoupElement[],
): PCBTraceError[] {
soup: AnyCircuitElement[],
): PcbTraceError[] {
addStartAndEndPortIdsIfMissing(soup)
const connMap = getFullConnectivityMapFromCircuitJson(soup)
const pcbTraces: PCBTrace[] = soup.filter(
(item): item is PCBTrace => item.type === "pcb_trace",
const pcbTraces: PcbTrace[] = soup.filter(
(item): item is PcbTrace => item.type === "pcb_trace",
)
const pcbSMTPads: PCBSMTPad[] = soup.filter(
(item): item is PCBSMTPad => item.type === "pcb_smtpad",
const pcbSMTPads: PcbSmtPad[] = soup.filter(
(item): item is PcbSmtPad => item.type === "pcb_smtpad",
)
const errors: PCBTraceError[] = []
const errors: PcbTraceError[] = []

for (let i = 0; i < pcbTraces.length; i++) {
for (let j = i + 1; j < pcbTraces.length; j++) {
Expand Down Expand Up @@ -204,12 +203,12 @@ function checkEachPcbTraceNonOverlapping(
const overlapPoint = tracesOverlap(pcbTraces[i], pcbTraces[j])
if (overlapPoint) {
errors.push({
type: "pcb_error",
type: "pcb_trace_error",
error_type: "pcb_trace_error",
message: `PCB trace ${pcbTraces[i].pcb_trace_id} overlaps with ${pcbTraces[j].pcb_trace_id}`,
pcb_trace_id: pcbTraces[i].pcb_trace_id,
source_trace_id: "",
pcb_error_id: `overlap_${pcbTraces[i].pcb_trace_id}_${pcbTraces[j].pcb_trace_id}`,
pcb_trace_error_id: `overlap_${pcbTraces[i].pcb_trace_id}_${pcbTraces[j].pcb_trace_id}`,
pcb_component_ids: [],
// @ts-ignore this is available in a future version of @tscircuit/soup
center: overlapPoint,
Expand All @@ -232,12 +231,12 @@ function checkEachPcbTraceNonOverlapping(
}
if (traceOverlapsWithPad(pcbTraces[i], pad)) {
errors.push({
type: "pcb_error",
type: "pcb_trace_error",
error_type: "pcb_trace_error",
message: `PCB trace ${getReadableNameForElement(soup, pcbTraces[i].pcb_trace_id)} overlaps with ${getReadableNameForElement(soup, pad.pcb_smtpad_id)}`,
pcb_trace_id: pcbTraces[i].pcb_trace_id,
source_trace_id: "",
pcb_error_id: `overlap_${pcbTraces[i].pcb_trace_id}_${pad.pcb_smtpad_id}`,
pcb_trace_error_id: `overlap_${pcbTraces[i].pcb_trace_id}_${pad.pcb_smtpad_id}`,
pcb_component_ids: [],
pcb_port_ids: getPcbPortIdsConnectedToTrace(pcbTraces[i]),
})
Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@
"devDependencies": {
"@biomejs/biome": "^1.9.0",
"@tscircuit/log-soup": "^1.0.2",
"@tscircuit/soup": "^0.0.40",
"@types/bun": "latest",
"circuit-json": "^0.0.85",
"@types/debug": "^4.1.12",
"debug": "^4.3.5",
"tsup": "^8.2.3"
},
"peerDependencies": {
"@tscircuit/soup": "*",
"circuit-json": "*",
"typescript": "^5.5.3"
},
"dependencies": {
"@tscircuit/soup-util": "0.0.15",
"circuit-json-to-connectivity-map": "^0.0.10"
"@tscircuit/soup-util": "0.0.36",
"circuit-json-to-connectivity-map": "^0.0.17"
}
}

0 comments on commit 2ac5427

Please sign in to comment.