Skip to content

Fix unknown-spdx identifier - #301

Merged
soimkim merged 10 commits into
mainfrom
fix/unknown-spdx-identifier
Aug 7, 2026
Merged

Fix unknown-spdx identifier#301
soimkim merged 10 commits into
mainfrom
fix/unknown-spdx-identifier

Conversation

@JustinWonjaePark

@JustinWonjaePark JustinWonjaePark commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Bug Fixes
    • Improved handling of unknown ScanCode license identifiers.
    • License references are now consistently extracted from SPDX license text.
    • SPDX validation now correctly rejects unsupported LicenseRef- prefixes, regardless of capitalization.
    • Preserves logical operators such as AND and OR in license expressions.
    • Reduces duplicate unknown-license results and reconstructs detected-license comments more accurately.
  • Tests
    • Expanded coverage for mixed, unknown, and multi-license SPDX expressions across current and legacy scan formats.
    • Added validation for redundant reference suppression and expression formatting.

@JustinWonjaePark JustinWonjaePark self-assigned this Aug 6, 2026
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@soimkim, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 39 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 218fd748-fa81-4970-ac7b-fe5ff13fc595

📥 Commits

Reviewing files that changed from the base of the PR and between 08dcd09 and 6ed9b77.

📒 Files selected for processing (2)
  • src/fosslight_source/_parsing_scancode_file_item.py
  • tests/test_parsing_unknown_spdx.py
📝 Walkthrough

Walkthrough

The ScanCode parsers now resolve unknown licenses from SPDX declarations, preserve expression operators, suppress overlapping references, and rebuild detected-license comments. Tests and fixtures cover current and legacy parser behavior.

Changes

ScanCode license parsing

Layer / File(s) Summary
License matching and earlier parser integration
src/fosslight_source/_parsing_scancode_file_item.py
SPDX declaration matching replaces the legacy LicenseRef extraction. Earlier parsing filters overlapping unknown references and validates normalized tokens.
SPDX expression resolution
src/fosslight_source/_parsing_scancode_file_item.py
New helpers preserve operators, resolve unknown SPDX tokens, suppress redundant references, and rebuild detected-license comments.
Later parser integration
src/fosslight_source/_parsing_scancode_file_item.py
Later parsing applies declaration-based resolution, overlap suppression, normalization, and conditional comment reconstruction.
Scan fixtures, runner, and validation
tests/test_files/*, tests/test_parsing_unknown_spdx.py, REUSE.toml, LICENSES/*
The scan runner supports command-line and programmatic execution. Fixtures and tests cover unknown, compound, parenthesized, and legacy SPDX expressions.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant SPDXDeclaration
  participant ScanCodeParser
  participant ExpressionResolver
  participant MatchedLicense
  SPDXDeclaration->>ScanCodeParser: provide SPDX-License-Identifier text
  ScanCodeParser->>ExpressionResolver: tokenize expression and preserve operators
  ExpressionResolver->>MatchedLicense: resolve unknown tokens and suppress overlaps
  MatchedLicense->>ScanCodeParser: return normalized detections
  ScanCodeParser->>ScanCodeParser: rebuild detected-license comments
Loading

Possibly related PRs

Suggested reviewers: soimkim

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: fixing handling of unknown SPDX identifiers.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/unknown-spdx-identifier

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@JustinWonjaePark JustinWonjaePark added the chore [PR/Issue] Refactoring, maintenance the code label Aug 6, 2026
Signed-off-by: Park Wonjae <wonjae.park@lge.com>
Signed-off-by: Park Wonjae <wonjae.park@lge.com>
@JustinWonjaePark
JustinWonjaePark force-pushed the fix/unknown-spdx-identifier branch from 542f1bd to 8969424 Compare August 6, 2026 04:11
@JustinWonjaePark
JustinWonjaePark marked this pull request as ready for review August 6, 2026 04:17

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/fosslight_source/_parsing_scancode_file_item.py (1)

155-162: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Share SPDX header extraction between both parser paths.

parsing_scancode_32_earlier and parsing_scancode_32_later contain the same extraction and prefix-removal logic. Move it to one helper and cover it with a regression test for mixed-case LicenseRef- values. This keeps both ScanCode result formats aligned.

Also applies to: 285-292

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/fosslight_source/_parsing_scancode_file_item.py` around lines 155 - 162,
Extract the duplicated SPDX header matching and case-insensitive LicenseRef-
removal into a shared helper used by both parsing_scancode_32_earlier and
parsing_scancode_32_later. Preserve the existing empty-result behavior when no
header matches, and add a regression test covering mixed-case LicenseRef-
values.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@src/fosslight_source/_parsing_scancode_file_item.py`:
- Around line 155-162: Extract the duplicated SPDX header matching and
case-insensitive LicenseRef- removal into a shared helper used by both
parsing_scancode_32_earlier and parsing_scancode_32_later. Preserve the existing
empty-result behavior when no header matches, and add a regression test covering
mixed-case LicenseRef- values.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 8e052d72-e04f-492f-875a-3bd7d1d3a031

📥 Commits

Reviewing files that changed from the base of the PR and between 7e038ed and 8969424.

📒 Files selected for processing (1)
  • src/fosslight_source/_parsing_scancode_file_item.py

Parse SPDX-License-Identifier when ScanCode reports unknown-spdx
(including compound expressions), suppress redundant
unknown-license-reference, and rebuild comments from the detected
expression while preserving AND/OR operators.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

🧹 Nitpick comments (4)
src/fosslight_source/_parsing_scancode_file_item.py (4)

383-395: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

This substitution block is unreachable and can be removed.

The guard tests KEYWORD_SCANCODE_UNKNOWN not in expr.lower(), where KEYWORD_SCANCODE_UNKNOWN is "unknown-spdx". The SPDX form licenseref-scancode-unknown-spdx contains that substring, so the guard is False exactly when the first re.sub would have work to do. The second re.sub is also unreachable for the same reason whenever an unknown-spdx token is present.

The token tests at Lines 414 and 416 use in on the lowercased token, so they already match the LicenseRef-scancode- forms. The normalization is not needed.

🔧 Proposed removal
     expr = detected_expression
-    if KEYWORD_SCANCODE_UNKNOWN not in expr.lower():
-        expr = re.sub(
-            r'licenseref-scancode-unknown-spdx',
-            KEYWORD_SCANCODE_UNKNOWN,
-            expr,
-            flags=re.IGNORECASE,
-        )
-        expr = re.sub(
-            r'licenseref-scancode-unknown-license-reference',
-            KEYWORD_UNKNOWN_LICENSE_REFERENCE,
-            expr,
-            flags=re.IGNORECASE,
-        )
-
     replacements = _build_unknown_spdx_replacement_queue(matches)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/fosslight_source/_parsing_scancode_file_item.py` around lines 383 - 395,
Remove the unreachable substitution block guarded by KEYWORD_SCANCODE_UNKNOWN in
the surrounding parsing function, including both re.sub calls; retain the
existing token checks and normalization flow because they already handle the
LicenseRef-scancode forms.

188-199: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

The 32-earlier path does not normalize the resolved token.

The 32-later path applies _normalize_license_token to the resolved value at Line 529. This path assigns the raw declaration text to license_value and only strips replace_word characters. The same input can therefore produce two different license strings depending on the ScanCode result format.

Consider applying _normalize_license_token here as well.

🔧 Proposed change
                             if KEYWORD_SCANCODE_UNKNOWN in (key or ""):
                                 matched = SPDX_LICENSE_IDENTIFIER_PATTERN.search(matched_txt)
                                 if matched:
-                                    license_value = LICENSE_REF_PREFIX_PATTERN.sub(
-                                        '', matched.group(1).strip()
-                                    )
+                                    declared = LICENSE_REF_PREFIX_PATTERN.sub(
+                                        '', matched.group(1).strip()
+                                    )
+                                    license_value = _normalize_license_token(declared) or declared
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/fosslight_source/_parsing_scancode_file_item.py` around lines 188 - 199,
Apply _normalize_license_token to the resolved license value in the
KEYWORD_SCANCODE_UNKNOWN branch after extracting and stripping matched.group(1),
matching the normalization used by the later path and ensuring consistent
license strings across ScanCode result formats.

522-528: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

This per-token resolution is unreachable.

Lines 503-511 already search the same matched_txt for SPDX-License-Identifier. If the search succeeds, found_lic_list no longer contains unknown-spdx, so no token here matches. If the search fails, this second search fails for the same input. The block never changes found_lic.

Remove it once the resolution at Lines 503-511 is corrected.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/fosslight_source/_parsing_scancode_file_item.py` around lines 522 - 528,
Remove the unreachable per-token resolution block guarded by
KEYWORD_SCANCODE_UNKNOWN in the found_lic loop. Keep the earlier matched_txt
resolution logic around resolved_unknown_spdx as the sole path for resolving
unknown SPDX values, without changing the surrounding token processing.

160-166: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Reuse a shared helper for the "other licenses" set.

This inline comprehension duplicates the intent of _matched_texts_with_other_licenses at Lines 71-79. The two paths use different fields (key here, license_expression there), so the suppression policy can drift.

Consider extracting a single helper that takes the license-token accessor as a parameter. The unknown-spdx exclusion noted on Lines 61-79 applies to this path as well.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/fosslight_source/_parsing_scancode_file_item.py` around lines 160 - 166,
Replace the inline matched_texts_with_other_licenses comprehension in the
surrounding parsing flow with the shared _matched_texts_with_other_licenses
helper. Refactor that helper to accept the license-token accessor needed by each
path, using key here and license_expression in the existing path, while
consistently excluding KEYWORD_UNKNOWN_LICENSE_REFERENCE tokens.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/fosslight_source/_parsing_scancode_file_item.py`:
- Around line 555-572: Preserve any truncation notice added by the
ScanItem.licenses setter when assigning comments in the detected-expression
handling block. Update the unknown-SPDX and “OR” branches around
result_item.comment so generated license text is appended to the existing
comment rather than replacing it, while retaining the current behavior when no
prior comment exists.
- Around line 333-337: Update the unknown-index handling in
build_comment_from_detected_expression so iteration stops once declared_tokens
is exhausted instead of reusing declared_tokens[-1]. Match the existing
mixed-branch behavior by only enqueueing licenses for available declarations,
allowing downstream processing to skip unmatched unknown-spdx tokens safely.
- Around line 512-531: Update the license filtering flow in the loop handling
split_spdx_expression so _normalize_license_token runs before the REMOVE_LICENSE
membership check. Preserve the existing unknown-license handling, then skip any
token whose normalized value is empty or appears in REMOVE_LICENSE, matching the
ordering used by build_comment_from_detected_expression.
- Around line 501-511: Update the unknown SPDX handling in the shown parsing
flow so it replaces only matching unknown-license tokens within found_lic_list,
preserving known licenses and compound operators. Reuse the per-token
substitution behavior from _build_unknown_spdx_replacement_queue rather than
assigning the entire expression to declared, and keep resolved_unknown_spdx set
when a replacement occurs.
- Around line 19-22: Update SPDX_LICENSE_IDENTIFIER_PATTERN to exclude trailing
comment terminators from captured license values, then move
LICENSE_REF_PREFIX_PATTERN application into _declared_licenses_from_matched_text
after splitting the declaration so every token is stripped independently. Apply
the same per-token stripping in the direct call sites around the license parsing
logic, while preserving existing tokenization and MatchedLicense construction.
- Around line 61-79: Update _expression_has_non_unknown_license_reference so
unknown-spdx is not treated as a real license when determining matched texts
with other licenses. Ensure _matched_texts_with_other_licenses only marks text
for suppression when the expression contains an actual non-unknown license,
preserving unknown-license-reference when no replacement license is resolved.
- Around line 429-434: Update the operator handling around the kept-licenses
accumulation so skipped tokens do not cause the next kept license to use
ops[token_idx - 1]. Carry operators across suppressed tokens and, when merging
skipped-token relations, preserve the safer OR relation over AND; ensure
expressions such as MIT OR unknown-license-reference AND Apache-2.0 produce MIT
OR Apache-2.0.
- Around line 303-356: Update build_comment_from_detected_expression to assign
unknown-spdx replacements by their originating ScanCode match rather than
consuming the file-level queue sequentially with repl_idx. Change
_build_unknown_spdx_replacement_queue to return a source-keyed mapping, such as
match index or (license_expression, matched_text), and use that key while
walking expression tokens so each unknown-spdx token receives its corresponding
detected license regardless of ordering.

In `@tests/test_files/dual_unknow.py`:
- Around line 40-54: Update the option-parsing flow around getopt.getopt so the
-h branch prints help and immediately returns before run_scan(); catch
getopt.GetoptError specifically, print the help message, and return without
scanning or generating reports. Preserve normal processing for valid non-help
options.

In `@tests/test_files/dual.txt`:
- Line 4: Update the SPDX license expression in the dual-license fixture to use
the uppercase OR operator, while preserving the existing license identifiers and
expression structure.

---

Nitpick comments:
In `@src/fosslight_source/_parsing_scancode_file_item.py`:
- Around line 383-395: Remove the unreachable substitution block guarded by
KEYWORD_SCANCODE_UNKNOWN in the surrounding parsing function, including both
re.sub calls; retain the existing token checks and normalization flow because
they already handle the LicenseRef-scancode forms.
- Around line 188-199: Apply _normalize_license_token to the resolved license
value in the KEYWORD_SCANCODE_UNKNOWN branch after extracting and stripping
matched.group(1), matching the normalization used by the later path and ensuring
consistent license strings across ScanCode result formats.
- Around line 522-528: Remove the unreachable per-token resolution block guarded
by KEYWORD_SCANCODE_UNKNOWN in the found_lic loop. Keep the earlier matched_txt
resolution logic around resolved_unknown_spdx as the sole path for resolving
unknown SPDX values, without changing the surrounding token processing.
- Around line 160-166: Replace the inline matched_texts_with_other_licenses
comprehension in the surrounding parsing flow with the shared
_matched_texts_with_other_licenses helper. Refactor that helper to accept the
license-token accessor needed by each path, using key here and
license_expression in the existing path, while consistently excluding
KEYWORD_UNKNOWN_LICENSE_REFERENCE tokens.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 3437e1f4-51b2-4b4c-98fc-0dd43d3e15fb

📥 Commits

Reviewing files that changed from the base of the PR and between 8969424 and fd8f025.

📒 Files selected for processing (6)
  • src/fosslight_source/_parsing_scancode_file_item.py
  • tests/test_files/dual.txt
  • tests/test_files/dual_unknow.py
  • tests/test_files/run_scancode.py
  • tests/test_files/temp.cpp
  • tests/test_files/test_unknown_spdx.txt

Comment thread src/fosslight_source/_parsing_scancode_file_item.py
Comment thread src/fosslight_source/_parsing_scancode_file_item.py
Comment thread src/fosslight_source/_parsing_scancode_file_item.py
Comment thread src/fosslight_source/_parsing_scancode_file_item.py
Comment thread src/fosslight_source/_parsing_scancode_file_item.py Outdated
Comment thread src/fosslight_source/_parsing_scancode_file_item.py Outdated
Comment thread src/fosslight_source/_parsing_scancode_file_item.py
Comment thread src/fosslight_source/_parsing_scancode_file_item.py Outdated
Comment thread tests/test_files/dual_unknow.py
Comment thread tests/test_files/dual.txt
soimkim added 2 commits August 7, 2026 10:38
Strip trailing */ and --> from SPDX-License-Identifier captures, and
remove LicenseRef- on each AND/OR token instead of only the first.
@soimkim soimkim changed the title Fix/unknown spdx identifier Fix unknown spdx identifier Aug 7, 2026
@soimkim soimkim changed the title Fix unknown spdx identifier Fix unknown-spdx identifier Aug 7, 2026
soimkim added 4 commits August 7, 2026 10:53
Parse detected expressions as a tree so skipped tokens respect
parentheses, and without parens use left-associative AND/OR (keep the
operator before the next kept token).
Keep grouping parentheses when three or more licenses are present, but drop
redundant outer parens for simple dual-license comments like (A OR B).
Collapse per-subdir test annotations into a single tests/** override.
tests/** is annotated as Apache-2.0, so MIT and LicenseRef-MIT-like
were unused and failed REUSE lint.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
tests/test_parsing_unknown_spdx.py (1)

179-194: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test compound declarations through parsing_scancode_32_earlier.

The legacy integration test uses one declared token only. Compound declaration tests currently exercise the helper or parsing_scancode_32_later.

Add legacy parser cases for both AND and OR. Assert the individual restored license tokens.

Proposed test expansion
+@pytest.mark.parametrize(
+    ("matched_text", "expected_licenses"),
+    [
+        (
+            "/* SPDX-License-Identifier: LicenseRef-MIT-like */",
+            ["MIT-like"],
+        ),
+        (
+            "/* SPDX-License-Identifier: LicenseRef-Foo AND LicenseRef-Bar */",
+            ["Foo", "Bar"],
+        ),
+        (
+            "/* SPDX-License-Identifier: LicenseRef-Foo OR LicenseRef-Bar */",
+            ["Foo", "Bar"],
+        ),
+    ],
+)
-def test_legacy_unknown_spdx_uses_declared_identifier():
+def test_legacy_unknown_spdx_uses_declared_identifier(
+    matched_text, expected_licenses
+):
     scancode_file_list = [{
         "path": "example.sol",
         "type": "file",
         "licenses": [{
             "key": "unknown-spdx",
-            "matched_text": "/* SPDX-License-Identifier: LicenseRef-MIT-like */",
+            "matched_text": matched_text,
         }],
         "copyrights": [],
     }]
 
     success, results, _messages, _ = parsing_scancode_32_earlier(scancode_file_list)
 
     assert success is True
-    assert results[0].licenses == ["MIT-like"]
+    assert results[0].licenses == expected_licenses
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_parsing_unknown_spdx.py` around lines 179 - 194, Add legacy
integration test cases through parsing_scancode_32_earlier for compound SPDX
declarations using both AND and OR. Build each case with the corresponding
declared identifier, assert successful parsing, and verify results[0].licenses
contains the individual restored license tokens rather than a combined
expression.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@REUSE.toml`:
- Around line 11-14: Update the tests/** annotation in REUSE.toml so precedence
= "override" applies only to files requiring the 2021 LG Electronics metadata,
while preserving declared copyright notices such as the 2026 notice in
tests/test_parsing_unknown_spdx.py.

---

Nitpick comments:
In `@tests/test_parsing_unknown_spdx.py`:
- Around line 179-194: Add legacy integration test cases through
parsing_scancode_32_earlier for compound SPDX declarations using both AND and
OR. Build each case with the corresponding declared identifier, assert
successful parsing, and verify results[0].licenses contains the individual
restored license tokens rather than a combined expression.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 500af39b-9474-44bc-a3a4-c040a95af404

📥 Commits

Reviewing files that changed from the base of the PR and between fd8f025 and 08dcd09.

📒 Files selected for processing (6)
  • LICENSES/LicenseRef-MIT-like.txt
  • LICENSES/MIT.txt
  • REUSE.toml
  • src/fosslight_source/_parsing_scancode_file_item.py
  • tests/test_files/run_scancode.py
  • tests/test_parsing_unknown_spdx.py
💤 Files with no reviewable changes (2)
  • LICENSES/LicenseRef-MIT-like.txt
  • LICENSES/MIT.txt
🚧 Files skipped from review as they are similar to previous changes (2)
  • tests/test_files/run_scancode.py
  • src/fosslight_source/_parsing_scancode_file_item.py

Comment thread REUSE.toml
Align unknown-spdx comment rebuild with the existing dual-license rule:
only write Comment when the detected expression includes OR.
@soimkim soimkim added bug fix [PR] Fix the bug and removed chore [PR/Issue] Refactoring, maintenance the code labels Aug 7, 2026
@soimkim
soimkim merged commit e4c9c3a into main Aug 7, 2026
7 of 8 checks passed
@soimkim
soimkim deleted the fix/unknown-spdx-identifier branch August 7, 2026 04:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug fix [PR] Fix the bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants