sysmlpy 0.64.0__tar.gz → 0.65.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/PKG-INFO +1 -1
  2. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/pyproject.toml +2 -1
  3. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/__init__.py +1 -1
  4. sysmlpy-0.65.0/src/sysmlpy/lsp/__init__.py +24 -0
  5. sysmlpy-0.65.0/src/sysmlpy/lsp/__main__.py +9 -0
  6. sysmlpy-0.65.0/src/sysmlpy/lsp/protocol.py +106 -0
  7. sysmlpy-0.65.0/src/sysmlpy/lsp/server.py +738 -0
  8. sysmlpy-0.65.0/src/sysmlpy/lsp/stdio.py +104 -0
  9. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/LICENSE +0 -0
  10. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/README.md +0 -0
  11. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/__main__.py +0 -0
  12. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/README.md +0 -0
  13. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/SysMLv2Lexer.interp +0 -0
  14. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/SysMLv2Lexer.py +0 -0
  15. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/SysMLv2Lexer.tokens +0 -0
  16. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/SysMLv2Parser.interp +0 -0
  17. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/SysMLv2Parser.py +0 -0
  18. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/SysMLv2Parser.tokens +0 -0
  19. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/SysMLv2ParserListener.py +0 -0
  20. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/SysMLv2ParserVisitor.py +0 -0
  21. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  22. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  23. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  24. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr_parser.py +0 -0
  25. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/antlr_visitor.py +0 -0
  26. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/boxes_view.py +0 -0
  27. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/definition.py +0 -0
  28. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/evaluator.py +0 -0
  29. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/examples/attribute_values.py +0 -0
  30. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/examples/part_attributes.py +0 -0
  31. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/examples/tuples_sequences.py +0 -0
  32. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/formatting.py +0 -0
  33. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/README.md +0 -0
  34. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.g4 +0 -0
  35. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.interp +0 -0
  36. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.py +0 -0
  37. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2Lexer.tokens +0 -0
  38. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.g4 +0 -0
  39. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.interp +0 -0
  40. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.py +0 -0
  41. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2Parser.tokens +0 -0
  42. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserListener.py +0 -0
  43. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/SysMLv2ParserVisitor.py +0 -0
  44. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/desc.xml +0 -0
  45. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/examples/camera.sysml +0 -0
  46. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/examples/toaster-system.sysml +0 -0
  47. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/examples/vehicle-model.sysml +0 -0
  48. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/antlr4/pom.xml +0 -0
  49. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/grammar/classes.py +0 -0
  50. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/interchange.py +0 -0
  51. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/LICENSE +0 -0
  52. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/README.md +0 -0
  53. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/__init__.py +0 -0
  54. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Analysis/AnalysisTooling.sysml +0 -0
  55. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Analysis/SampledFunctions.sysml +0 -0
  56. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Analysis/StateSpaceRepresentation.sysml +0 -0
  57. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Analysis/TradeStudies.sysml +0 -0
  58. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Cause and Effect/CausationConnections.sysml +0 -0
  59. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Cause and Effect/CauseAndEffect.sysml +0 -0
  60. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Geometry/ShapeItems.sysml +0 -0
  61. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Geometry/SpatialItems.sysml +0 -0
  62. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Metadata/ImageMetadata.sysml +0 -0
  63. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Metadata/ModelingMetadata.sysml +0 -0
  64. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Metadata/ParametersOfInterestMetadata.sysml +0 -0
  65. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Metadata/RiskMetadata.sysml +0 -0
  66. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQ.sysml +0 -0
  67. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAcoustics.sysml +0 -0
  68. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQAtomicNuclear.sysml +0 -0
  69. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQBase.sysml +0 -0
  70. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCharacteristicNumbers.sysml +0 -0
  71. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQChemistryMolecular.sysml +0 -0
  72. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQCondensedMatter.sysml +0 -0
  73. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQElectromagnetism.sysml +0 -0
  74. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQInformation.sysml +0 -0
  75. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQLight.sysml +0 -0
  76. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQMechanics.sysml +0 -0
  77. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQSpaceTime.sysml +0 -0
  78. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/ISQThermodynamics.sysml +0 -0
  79. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementRefCalculations.sysml +0 -0
  80. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/MeasurementReferences.sysml +0 -0
  81. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/Quantities.sysml +0 -0
  82. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/QuantityCalculations.sysml +0 -0
  83. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/SI.sysml +0 -0
  84. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/SIPrefixes.sysml +0 -0
  85. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/TensorCalculations.sysml +0 -0
  86. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/Time.sysml +0 -0
  87. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/USCustomaryUnits.sysml +0 -0
  88. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Quantities and Units/VectorCalculations.sysml +0 -0
  89. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Requirement Derivation/DerivationConnections.sysml +0 -0
  90. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/domain/Requirement Derivation/RequirementDerivation.sysml +0 -0
  91. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Base.kerml +0 -0
  92. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/BaseFunctions.kerml +0 -0
  93. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/BooleanFunctions.kerml +0 -0
  94. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Clocks.kerml +0 -0
  95. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/CollectionFunctions.kerml +0 -0
  96. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Collections.kerml +0 -0
  97. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/ComplexFunctions.kerml +0 -0
  98. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/ControlFunctions.kerml +0 -0
  99. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/ControlPerformances.kerml +0 -0
  100. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/DataFunctions.kerml +0 -0
  101. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/FeatureReferencingPerformances.kerml +0 -0
  102. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/IntegerFunctions.kerml +0 -0
  103. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/KerML.kerml +0 -0
  104. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Links.kerml +0 -0
  105. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Metaobjects.kerml +0 -0
  106. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/NaturalFunctions.kerml +0 -0
  107. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/NumericalFunctions.kerml +0 -0
  108. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Objects.kerml +0 -0
  109. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Observation.kerml +0 -0
  110. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/OccurrenceFunctions.kerml +0 -0
  111. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Occurrences.kerml +0 -0
  112. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Performances.kerml +0 -0
  113. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/RationalFunctions.kerml +0 -0
  114. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/RealFunctions.kerml +0 -0
  115. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/ScalarFunctions.kerml +0 -0
  116. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/ScalarValues.kerml +0 -0
  117. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/SequenceFunctions.kerml +0 -0
  118. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/SpatialFrames.kerml +0 -0
  119. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/StatePerformances.kerml +0 -0
  120. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/StringFunctions.kerml +0 -0
  121. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Transfers.kerml +0 -0
  122. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/TransitionPerformances.kerml +0 -0
  123. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/TrigFunctions.kerml +0 -0
  124. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/Triggers.kerml +0 -0
  125. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/VectorFunctions.kerml +0 -0
  126. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/kernel/VectorValues.kerml +0 -0
  127. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Actions.sysml +0 -0
  128. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Allocations.sysml +0 -0
  129. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/AnalysisCases.sysml +0 -0
  130. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Attributes.sysml +0 -0
  131. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Calculations.sysml +0 -0
  132. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Cases.sysml +0 -0
  133. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Connections.sysml +0 -0
  134. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Constraints.sysml +0 -0
  135. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Flows.sysml +0 -0
  136. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Interfaces.sysml +0 -0
  137. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Items.sysml +0 -0
  138. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Metadata.sysml +0 -0
  139. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Parts.sysml +0 -0
  140. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Ports.sysml +0 -0
  141. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Requirements.sysml +0 -0
  142. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/StandardViewDefinitions.sysml +0 -0
  143. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/States.sysml +0 -0
  144. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/SysML.sysml +0 -0
  145. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/UseCases.sysml +0 -0
  146. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/VerificationCases.sysml +0 -0
  147. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/library/systems/Views.sysml +0 -0
  148. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/navigate.py +0 -0
  149. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/plantuml.py +0 -0
  150. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/project.py +0 -0
  151. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/semantic.py +0 -0
  152. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/store.py +0 -0
  153. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/traceability.py +0 -0
  154. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/us_customary_units.txt +0 -0
  155. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/usage.py +0 -0
  156. {sysmlpy-0.64.0 → sysmlpy-0.65.0}/src/sysmlpy/validator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sysmlpy
3
- Version: 0.64.0
3
+ Version: 0.65.0
4
4
  Summary:
5
5
  License-File: LICENSE
6
6
  Author: Jon R. Fox (mycr0ft)
@@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api"
6
6
 
7
7
  [project]
8
8
  name = "sysmlpy"
9
- version = "0.64.0"
9
+ version = "0.65.0"
10
10
  description = ""
11
11
  authors = [{ name = "Jon R. Fox (mycr0ft)", email = "jon.fox@drfox.com" }]
12
12
  readme = "README.md"
@@ -27,6 +27,7 @@ kuzu = ["kuzu"]
27
27
 
28
28
  [tool.poetry.scripts]
29
29
  sysmlpy = "sysmlpy.__main__:main"
30
+ sysmlpy-lsp = "sysmlpy.lsp.stdio:main"
30
31
 
31
32
  [tool.poetry.group.dev.dependencies]
32
33
  pytest = ">=8.0,<9.0"
@@ -30,7 +30,7 @@ __all__ = [
30
30
  "render_state_transition_view_svg", "boxes_view",
31
31
  ]
32
32
  __author__ = "Jon Fox"
33
- __version__ = "0.64.0"
33
+ __version__ = "0.65.0"
34
34
 
35
35
  from sysmlpy.usage import (
36
36
  Item, Attribute, Part, Port, Action, Reference, UseCase, Requirement, Interface, Message,
@@ -0,0 +1,24 @@
1
+ # LSP package (v0.65.0 — Adoption Roadmap Goal 5)
2
+ #
3
+ # A minimal Language Server Protocol (LSP 3.17) implementation exposing
4
+ # sysmlpy's parse/analyze pipeline to editors:
5
+ #
6
+ # textDocument/didOpen|didChange|didClose → publishDiagnostics
7
+ # textDocument/hover | /documentSymbol | /definition | /completion
8
+ #
9
+ # Layout:
10
+ # protocol.py — JSON-RPC Content-Length framing + LSP constants
11
+ # server.py — transport-agnostic language server (dict in → dict out)
12
+ # stdio.py — stdio transport; ``python -m sysmlpy.lsp`` entry point
13
+ #
14
+ # See docs/LSP.md for VS Code / Neovim wiring instructions.
15
+
16
+ from sysmlpy.lsp.protocol import (
17
+ encode_message, read_message, ErrorCodes, SymbolKind,
18
+ )
19
+ from sysmlpy.lsp.server import Document, DocumentIndex, SysmlLanguageServer
20
+
21
+ __all__ = [
22
+ "encode_message", "read_message", "ErrorCodes", "SymbolKind",
23
+ "Document", "DocumentIndex", "SysmlLanguageServer",
24
+ ]
@@ -0,0 +1,9 @@
1
+ # -*- coding: utf-8 -*-
2
+ """``python -m sysmlpy.lsp`` — run the language server over stdio."""
3
+
4
+ import sys
5
+
6
+ from sysmlpy.lsp.stdio import main
7
+
8
+ if __name__ == "__main__":
9
+ sys.exit(main())
@@ -0,0 +1,106 @@
1
+ # -*- coding: utf-8 -*-
2
+ """JSON-RPC / LSP protocol helpers (v0.65.0 — Adoption Roadmap Goal 5).
3
+
4
+ Implements the ``Content-Length`` message framing used by the Language
5
+ Server Protocol over byte streams, plus the small set of LSP constants
6
+ the server needs. Deliberately dependency-free so the server core can
7
+ be tested in-process without a transport.
8
+
9
+ Message framing (both sides):
10
+
11
+ Content-Length: <bytes>\\r\\n
12
+ [Content-Type: application/vscode-jsonrpc; charset=utf-8]\\r\\n
13
+ \\r\\n
14
+ <JSON payload>
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import json
20
+ from typing import BinaryIO, Dict, Any, Optional
21
+
22
+ HEADER_ENCODING = "ascii"
23
+ PAYLOAD_ENCODING = "utf-8"
24
+
25
+
26
+ class ErrorCodes:
27
+ """JSON-RPC / LSP error codes used by the server."""
28
+
29
+ PARSE_ERROR = -32700
30
+ INVALID_REQUEST = -32600
31
+ METHOD_NOT_FOUND = -32601
32
+ INVALID_PARAMS = -32602
33
+ INTERNAL_ERROR = -32603
34
+ SERVER_NOT_INITIALIZED = -32002
35
+
36
+
37
+ class SymbolKind:
38
+ """LSP SymbolKind values used in documentSymbol results."""
39
+
40
+ FILE = 1
41
+ MODULE = 2
42
+ NAMESPACE = 3
43
+ PACKAGE = 4
44
+ CLASS = 5
45
+ METHOD = 6
46
+ PROPERTY = 7
47
+ FIELD = 8
48
+ ENUM = 10
49
+ INTERFACE = 11
50
+ FUNCTION = 12
51
+ VARIABLE = 13
52
+ CONSTANT = 14
53
+ ENUM_MEMBER = 22
54
+ STRUCT = 23
55
+
56
+
57
+ def encode_message(payload: Dict[str, Any]) -> bytes:
58
+ """Encode a JSON-RPC message dict with LSP ``Content-Length`` framing."""
59
+ body = json.dumps(payload, ensure_ascii=False).encode(PAYLOAD_ENCODING)
60
+ header = f"Content-Length: {len(body)}\r\n\r\n".encode(HEADER_ENCODING)
61
+ return header + body
62
+
63
+
64
+ def read_message(stream: BinaryIO) -> Optional[Dict[str, Any]]:
65
+ """Read one framed JSON-RPC message from a binary stream.
66
+
67
+ Returns the decoded message dict, or ``None`` on clean EOF before any
68
+ header bytes. Raises ``ValueError`` on malformed framing.
69
+
70
+ Tolerates ``\\n``-only header terminators in addition to the spec's
71
+ ``\\r\\n`` (some clients get this wrong; being lenient costs nothing).
72
+ """
73
+ # Read header lines until the blank separator.
74
+ content_length: Optional[int] = None
75
+ saw_header_bytes = False
76
+ while True:
77
+ line = stream.readline()
78
+ if not line:
79
+ if not saw_header_bytes:
80
+ return None # clean EOF
81
+ raise ValueError("EOF while reading message header")
82
+ stripped = line.strip()
83
+ if not stripped:
84
+ if content_length is None and not saw_header_bytes:
85
+ continue # tolerate stray blank lines between messages
86
+ break # end of headers
87
+ saw_header_bytes = True
88
+ name, _, value = stripped.partition(b":")
89
+ if name.strip().lower() == b"content-length":
90
+ try:
91
+ content_length = int(value.strip())
92
+ except ValueError:
93
+ raise ValueError(
94
+ f"Malformed Content-Length header: {value!r}"
95
+ ) from None
96
+
97
+ if content_length is None:
98
+ raise ValueError("Missing Content-Length header")
99
+
100
+ body = stream.read(content_length)
101
+ if len(body) < content_length:
102
+ raise ValueError(
103
+ f"EOF while reading message body "
104
+ f"({len(body)} of {content_length} bytes)"
105
+ )
106
+ return json.loads(body.decode(PAYLOAD_ENCODING))