aws-iam-language-server 0.0.8 → 0.0.10
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.
- package/package.json +1 -1
- package/readme.md +9 -0
- package/src/data/servicereference/actions.json +1 -1
- package/src/data/servicereference/services/a2c.json +1 -1
- package/src/data/servicereference/services/a4b.json +1 -1
- package/src/data/servicereference/services/access-analyzer.json +1 -1
- package/src/data/servicereference/services/account.json +1 -1
- package/src/data/servicereference/services/acm-pca.json +1 -1
- package/src/data/servicereference/services/acm.json +1 -1
- package/src/data/servicereference/services/aco-automation.json +1 -1
- package/src/data/servicereference/services/action-recommendations.json +1 -1
- package/src/data/servicereference/services/activate.json +1 -1
- package/src/data/servicereference/services/aidevops.json +1 -1
- package/src/data/servicereference/services/aiops.json +1 -1
- package/src/data/servicereference/services/airflow-serverless.json +1 -1
- package/src/data/servicereference/services/airflow.json +1 -1
- package/src/data/servicereference/services/amplify.json +1 -1
- package/src/data/servicereference/services/amplifybackend.json +1 -1
- package/src/data/servicereference/services/amplifyuibuilder.json +1 -1
- package/src/data/servicereference/services/aoss.json +1 -1
- package/src/data/servicereference/services/apigateway.json +1 -1
- package/src/data/servicereference/services/app-integrations.json +1 -1
- package/src/data/servicereference/services/appconfig.json +1 -1
- package/src/data/servicereference/services/appfabric.json +1 -1
- package/src/data/servicereference/services/appflow.json +1 -1
- package/src/data/servicereference/services/application-autoscaling.json +1 -1
- package/src/data/servicereference/services/application-signals.json +1 -1
- package/src/data/servicereference/services/application-transformation.json +1 -1
- package/src/data/servicereference/services/applicationinsights.json +1 -1
- package/src/data/servicereference/services/appmesh-preview.json +1 -1
- package/src/data/servicereference/services/appmesh.json +1 -1
- package/src/data/servicereference/services/apprunner.json +1 -1
- package/src/data/servicereference/services/appstream.json +1 -1
- package/src/data/servicereference/services/appstudio.json +1 -1
- package/src/data/servicereference/services/appsync.json +1 -1
- package/src/data/servicereference/services/apptest.json +1 -1
- package/src/data/servicereference/services/aps.json +1 -1
- package/src/data/servicereference/services/arc-region-switch.json +1 -1
- package/src/data/servicereference/services/arc-zonal-shift.json +1 -1
- package/src/data/servicereference/services/arsenal.json +1 -1
- package/src/data/servicereference/services/artifact.json +1 -1
- package/src/data/servicereference/services/athena.json +1 -1
- package/src/data/servicereference/services/auditmanager.json +1 -1
- package/src/data/servicereference/services/autoscaling-plans.json +1 -1
- package/src/data/servicereference/services/autoscaling.json +1 -1
- package/src/data/servicereference/services/aws-marketplace-management.json +1 -1
- package/src/data/servicereference/services/aws-marketplace.json +1 -1
- package/src/data/servicereference/services/aws-mcp.json +1 -1
- package/src/data/servicereference/services/aws-portal.json +1 -1
- package/src/data/servicereference/services/awsconnector.json +1 -1
- package/src/data/servicereference/services/b2bi.json +1 -1
- package/src/data/servicereference/services/backup-gateway.json +1 -1
- package/src/data/servicereference/services/backup-search.json +1 -1
- package/src/data/servicereference/services/backup-storage.json +1 -1
- package/src/data/servicereference/services/backup.json +1 -1
- package/src/data/servicereference/services/batch.json +1 -1
- package/src/data/servicereference/services/bcm-dashboards.json +1 -1
- package/src/data/servicereference/services/bcm-data-exports.json +1 -1
- package/src/data/servicereference/services/bcm-pricing-calculator.json +1 -1
- package/src/data/servicereference/services/bcm-recommended-actions.json +1 -1
- package/src/data/servicereference/services/bedrock-agentcore.json +1 -1
- package/src/data/servicereference/services/bedrock-mantle.json +1 -1
- package/src/data/servicereference/services/bedrock.json +1 -1
- package/src/data/servicereference/services/billing.json +1 -1
- package/src/data/servicereference/services/billingconductor.json +1 -1
- package/src/data/servicereference/services/braket.json +1 -1
- package/src/data/servicereference/services/budgets.json +1 -1
- package/src/data/servicereference/services/bugbust.json +1 -1
- package/src/data/servicereference/services/cases.json +1 -1
- package/src/data/servicereference/services/cassandra.json +1 -1
- package/src/data/servicereference/services/ce.json +1 -1
- package/src/data/servicereference/services/chatbot.json +1 -1
- package/src/data/servicereference/services/chime.json +1 -1
- package/src/data/servicereference/services/cleanrooms-ml.json +1 -1
- package/src/data/servicereference/services/cleanrooms.json +1 -1
- package/src/data/servicereference/services/cloud9.json +1 -1
- package/src/data/servicereference/services/clouddirectory.json +1 -1
- package/src/data/servicereference/services/cloudformation.json +1 -1
- package/src/data/servicereference/services/cloudfront-keyvaluestore.json +1 -1
- package/src/data/servicereference/services/cloudfront.json +1 -1
- package/src/data/servicereference/services/cloudhsm.json +1 -1
- package/src/data/servicereference/services/cloudsearch.json +1 -1
- package/src/data/servicereference/services/cloudshell.json +1 -1
- package/src/data/servicereference/services/cloudtrail-data.json +1 -1
- package/src/data/servicereference/services/cloudtrail.json +1 -1
- package/src/data/servicereference/services/cloudwatch.json +1 -1
- package/src/data/servicereference/services/codeartifact.json +1 -1
- package/src/data/servicereference/services/codebuild.json +1 -1
- package/src/data/servicereference/services/codecatalyst.json +1 -1
- package/src/data/servicereference/services/codecommit.json +1 -1
- package/src/data/servicereference/services/codeconnections.json +1 -1
- package/src/data/servicereference/services/codedeploy-commands-secure.json +1 -1
- package/src/data/servicereference/services/codedeploy.json +1 -1
- package/src/data/servicereference/services/codeguru-profiler.json +1 -1
- package/src/data/servicereference/services/codeguru-reviewer.json +1 -1
- package/src/data/servicereference/services/codeguru-security.json +1 -1
- package/src/data/servicereference/services/codeguru.json +1 -1
- package/src/data/servicereference/services/codepipeline.json +1 -1
- package/src/data/servicereference/services/codestar-connections.json +1 -1
- package/src/data/servicereference/services/codestar-notifications.json +1 -1
- package/src/data/servicereference/services/codestar.json +1 -1
- package/src/data/servicereference/services/codewhisperer.json +1 -1
- package/src/data/servicereference/services/cognito-identity.json +1 -1
- package/src/data/servicereference/services/cognito-idp.json +1 -1
- package/src/data/servicereference/services/cognito-sync.json +1 -1
- package/src/data/servicereference/services/comprehend.json +1 -1
- package/src/data/servicereference/services/comprehendmedical.json +1 -1
- package/src/data/servicereference/services/compute-optimizer.json +1 -1
- package/src/data/servicereference/services/config.json +1 -1
- package/src/data/servicereference/services/connect-campaigns.json +1 -1
- package/src/data/servicereference/services/connect.json +1 -1
- package/src/data/servicereference/services/consoleapp.json +1 -1
- package/src/data/servicereference/services/consolidatedbilling.json +1 -1
- package/src/data/servicereference/services/controlcatalog.json +1 -1
- package/src/data/servicereference/services/controltower.json +1 -1
- package/src/data/servicereference/services/cost-optimization-hub.json +1 -1
- package/src/data/servicereference/services/cur.json +1 -1
- package/src/data/servicereference/services/customer-verification.json +1 -1
- package/src/data/servicereference/services/databrew.json +1 -1
- package/src/data/servicereference/services/dataexchange.json +1 -1
- package/src/data/servicereference/services/datapipeline.json +1 -1
- package/src/data/servicereference/services/datasync.json +1 -1
- package/src/data/servicereference/services/datazone.json +1 -1
- package/src/data/servicereference/services/dax.json +1 -1
- package/src/data/servicereference/services/dbqms.json +1 -1
- package/src/data/servicereference/services/deadline.json +1 -1
- package/src/data/servicereference/services/detective.json +1 -1
- package/src/data/servicereference/services/devicefarm.json +1 -1
- package/src/data/servicereference/services/devops-guru.json +1 -1
- package/src/data/servicereference/services/directconnect.json +1 -1
- package/src/data/servicereference/services/discovery.json +1 -1
- package/src/data/servicereference/services/dlm.json +1 -1
- package/src/data/servicereference/services/dms.json +1 -1
- package/src/data/servicereference/services/docdb-elastic.json +1 -1
- package/src/data/servicereference/services/drs.json +1 -1
- package/src/data/servicereference/services/ds-data.json +1 -1
- package/src/data/servicereference/services/ds.json +1 -1
- package/src/data/servicereference/services/dsql.json +1 -1
- package/src/data/servicereference/services/dynamodb.json +1 -1
- package/src/data/servicereference/services/ebs.json +1 -1
- package/src/data/servicereference/services/ec2-instance-connect.json +1 -1
- package/src/data/servicereference/services/ec2.json +1 -1
- package/src/data/servicereference/services/ec2messages.json +1 -1
- package/src/data/servicereference/services/ecr-public.json +1 -1
- package/src/data/servicereference/services/ecr.json +1 -1
- package/src/data/servicereference/services/ecs-mcp.json +1 -1
- package/src/data/servicereference/services/ecs.json +1 -1
- package/src/data/servicereference/services/eks-auth.json +1 -1
- package/src/data/servicereference/services/eks-mcp.json +1 -1
- package/src/data/servicereference/services/eks.json +1 -1
- package/src/data/servicereference/services/elasticache.json +1 -1
- package/src/data/servicereference/services/elasticbeanstalk.json +1 -1
- package/src/data/servicereference/services/elasticfilesystem.json +1 -1
- package/src/data/servicereference/services/elasticloadbalancing.json +1 -1
- package/src/data/servicereference/services/elasticmapreduce.json +1 -1
- package/src/data/servicereference/services/elastictranscoder.json +1 -1
- package/src/data/servicereference/services/elemental-activations.json +1 -1
- package/src/data/servicereference/services/elemental-appliances-software.json +1 -1
- package/src/data/servicereference/services/elemental-inference.json +1 -1
- package/src/data/servicereference/services/elemental-support-cases.json +1 -1
- package/src/data/servicereference/services/elemental-support-content.json +1 -1
- package/src/data/servicereference/services/emr-containers.json +1 -1
- package/src/data/servicereference/services/emr-serverless.json +1 -1
- package/src/data/servicereference/services/entityresolution.json +1 -1
- package/src/data/servicereference/services/es.json +1 -1
- package/src/data/servicereference/services/events.json +1 -1
- package/src/data/servicereference/services/evidently.json +1 -1
- package/src/data/servicereference/services/evs.json +1 -1
- package/src/data/servicereference/services/execute-api.json +1 -1
- package/src/data/servicereference/services/finspace-api.json +1 -1
- package/src/data/servicereference/services/finspace.json +1 -1
- package/src/data/servicereference/services/firehose.json +1 -1
- package/src/data/servicereference/services/fis.json +1 -1
- package/src/data/servicereference/services/fms.json +1 -1
- package/src/data/servicereference/services/forecast.json +1 -1
- package/src/data/servicereference/services/frauddetector.json +1 -1
- package/src/data/servicereference/services/freertos.json +1 -1
- package/src/data/servicereference/services/freetier.json +1 -1
- package/src/data/servicereference/services/fsx.json +1 -1
- package/src/data/servicereference/services/gamelift.json +1 -1
- package/src/data/servicereference/services/gameliftstreams.json +1 -1
- package/src/data/servicereference/services/geo-maps.json +1 -1
- package/src/data/servicereference/services/geo-places.json +1 -1
- package/src/data/servicereference/services/geo-routes.json +1 -1
- package/src/data/servicereference/services/geo.json +1 -1
- package/src/data/servicereference/services/glacier.json +1 -1
- package/src/data/servicereference/services/globalaccelerator.json +1 -1
- package/src/data/servicereference/services/glue.json +1 -1
- package/src/data/servicereference/services/grafana.json +1 -1
- package/src/data/servicereference/services/greengrass.json +1 -1
- package/src/data/servicereference/services/groundstation.json +1 -1
- package/src/data/servicereference/services/groundtruthlabeling.json +1 -1
- package/src/data/servicereference/services/guardduty.json +1 -1
- package/src/data/servicereference/services/health-agent.json +1 -1
- package/src/data/servicereference/services/health.json +1 -1
- package/src/data/servicereference/services/healthlake.json +1 -1
- package/src/data/servicereference/services/honeycode.json +1 -1
- package/src/data/servicereference/services/iam.json +1 -1
- package/src/data/servicereference/services/identity-sync.json +1 -1
- package/src/data/servicereference/services/identitystore-auth.json +1 -1
- package/src/data/servicereference/services/identitystore.json +1 -1
- package/src/data/servicereference/services/imagebuilder.json +1 -1
- package/src/data/servicereference/services/importexport.json +1 -1
- package/src/data/servicereference/services/inspector-scan.json +1 -1
- package/src/data/servicereference/services/inspector.json +1 -1
- package/src/data/servicereference/services/inspector2-telemetry.json +1 -1
- package/src/data/servicereference/services/inspector2.json +1 -1
- package/src/data/servicereference/services/interconnect.json +1 -1
- package/src/data/servicereference/services/internetmonitor.json +1 -1
- package/src/data/servicereference/services/invoicing.json +1 -1
- package/src/data/servicereference/services/iot-device-tester.json +1 -1
- package/src/data/servicereference/services/iot.json +1 -1
- package/src/data/servicereference/services/iotanalytics.json +1 -1
- package/src/data/servicereference/services/iotdeviceadvisor.json +1 -1
- package/src/data/servicereference/services/iotevents.json +1 -1
- package/src/data/servicereference/services/iotfleethub.json +1 -1
- package/src/data/servicereference/services/iotfleetwise.json +1 -1
- package/src/data/servicereference/services/iotjobsdata.json +1 -1
- package/src/data/servicereference/services/iotmanagedintegrations.json +1 -1
- package/src/data/servicereference/services/iotsitewise.json +1 -1
- package/src/data/servicereference/services/iottwinmaker.json +1 -1
- package/src/data/servicereference/services/iotwireless.json +1 -1
- package/src/data/servicereference/services/iq-permission.json +1 -1
- package/src/data/servicereference/services/iq.json +1 -1
- package/src/data/servicereference/services/ivs.json +1 -1
- package/src/data/servicereference/services/ivschat.json +1 -1
- package/src/data/servicereference/services/kafka-cluster.json +1 -1
- package/src/data/servicereference/services/kafka.json +1 -1
- package/src/data/servicereference/services/kafkaconnect.json +1 -1
- package/src/data/servicereference/services/kendra-ranking.json +1 -1
- package/src/data/servicereference/services/kendra.json +1 -1
- package/src/data/servicereference/services/kinesis.json +1 -1
- package/src/data/servicereference/services/kinesisanalytics.json +1 -1
- package/src/data/servicereference/services/kinesisvideo.json +1 -1
- package/src/data/servicereference/services/kms.json +1 -1
- package/src/data/servicereference/services/lakeformation.json +1 -1
- package/src/data/servicereference/services/lambda.json +1 -1
- package/src/data/servicereference/services/launchwizard.json +1 -1
- package/src/data/servicereference/services/lex.json +1 -1
- package/src/data/servicereference/services/license-manager-linux-subscriptions.json +1 -1
- package/src/data/servicereference/services/license-manager-user-subscriptions.json +1 -1
- package/src/data/servicereference/services/license-manager.json +1 -1
- package/src/data/servicereference/services/lightsail.json +1 -1
- package/src/data/servicereference/services/logs.json +1 -1
- package/src/data/servicereference/services/lookoutequipment.json +1 -1
- package/src/data/servicereference/services/lookoutmetrics.json +1 -1
- package/src/data/servicereference/services/lookoutvision.json +1 -1
- package/src/data/servicereference/services/m2.json +1 -1
- package/src/data/servicereference/services/machinelearning.json +1 -1
- package/src/data/servicereference/services/macie2.json +1 -1
- package/src/data/servicereference/services/managedblockchain-query.json +1 -1
- package/src/data/servicereference/services/managedblockchain.json +1 -1
- package/src/data/servicereference/services/mapcredits.json +1 -1
- package/src/data/servicereference/services/marketplacecommerceanalytics.json +1 -1
- package/src/data/servicereference/services/mechanicalturk.json +1 -1
- package/src/data/servicereference/services/mediaconnect.json +1 -1
- package/src/data/servicereference/services/mediaconvert.json +1 -1
- package/src/data/servicereference/services/mediaimport.json +1 -1
- package/src/data/servicereference/services/medialive.json +1 -1
- package/src/data/servicereference/services/mediapackage-vod.json +1 -1
- package/src/data/servicereference/services/mediapackage.json +1 -1
- package/src/data/servicereference/services/mediapackagev2.json +1 -1
- package/src/data/servicereference/services/mediastore.json +1 -1
- package/src/data/servicereference/services/mediatailor.json +1 -1
- package/src/data/servicereference/services/medical-imaging.json +1 -1
- package/src/data/servicereference/services/memorydb.json +1 -1
- package/src/data/servicereference/services/mgh.json +1 -1
- package/src/data/servicereference/services/mgn.json +1 -1
- package/src/data/servicereference/services/migrationhub-orchestrator.json +1 -1
- package/src/data/servicereference/services/migrationhub-strategy.json +1 -1
- package/src/data/servicereference/services/mobileanalytics.json +1 -1
- package/src/data/servicereference/services/mobiletargeting.json +1 -1
- package/src/data/servicereference/services/monitron.json +1 -1
- package/src/data/servicereference/services/mpa.json +1 -1
- package/src/data/servicereference/services/mq.json +1 -1
- package/src/data/servicereference/services/neptune-db.json +1 -1
- package/src/data/servicereference/services/neptune-graph.json +1 -1
- package/src/data/servicereference/services/network-firewall.json +1 -1
- package/src/data/servicereference/services/network-security-director.json +1 -1
- package/src/data/servicereference/services/networkflowmonitor.json +1 -1
- package/src/data/servicereference/services/networkmanager-chat.json +1 -1
- package/src/data/servicereference/services/networkmanager.json +1 -1
- package/src/data/servicereference/services/networkmonitor.json +1 -1
- package/src/data/servicereference/services/nimble.json +1 -1
- package/src/data/servicereference/services/notifications-contacts.json +1 -1
- package/src/data/servicereference/services/notifications.json +1 -1
- package/src/data/servicereference/services/nova-act.json +1 -1
- package/src/data/servicereference/services/oam.json +1 -1
- package/src/data/servicereference/services/observabilityadmin.json +1 -1
- package/src/data/servicereference/services/odb.json +1 -1
- package/src/data/servicereference/services/omics.json +1 -1
- package/src/data/servicereference/services/one.json +1 -1
- package/src/data/servicereference/services/opensearch.json +1 -1
- package/src/data/servicereference/services/opsworks-cm.json +1 -1
- package/src/data/servicereference/services/opsworks.json +1 -1
- package/src/data/servicereference/services/organizations.json +1 -1
- package/src/data/servicereference/services/osis.json +1 -1
- package/src/data/servicereference/services/outposts.json +1 -1
- package/src/data/servicereference/services/panorama.json +1 -1
- package/src/data/servicereference/services/partnercentral-account-management.json +1 -1
- package/src/data/servicereference/services/partnercentral.json +1 -1
- package/src/data/servicereference/services/payment-cryptography.json +1 -1
- package/src/data/servicereference/services/payments.json +1 -1
- package/src/data/servicereference/services/pca-connector-ad.json +1 -1
- package/src/data/servicereference/services/pca-connector-scep.json +1 -1
- package/src/data/servicereference/services/pcs.json +1 -1
- package/src/data/servicereference/services/personalize.json +1 -1
- package/src/data/servicereference/services/pi.json +1 -1
- package/src/data/servicereference/services/pipes.json +1 -1
- package/src/data/servicereference/services/polly.json +1 -1
- package/src/data/servicereference/services/pricing.json +1 -1
- package/src/data/servicereference/services/pricingplanmanager.json +1 -1
- package/src/data/servicereference/services/private-networks.json +1 -1
- package/src/data/servicereference/services/profile.json +1 -1
- package/src/data/servicereference/services/proton.json +1 -1
- package/src/data/servicereference/services/purchase-orders.json +1 -1
- package/src/data/servicereference/services/q.json +1 -1
- package/src/data/servicereference/services/qapps.json +1 -1
- package/src/data/servicereference/services/qbusiness.json +1 -1
- package/src/data/servicereference/services/qdeveloper.json +1 -1
- package/src/data/servicereference/services/qldb.json +1 -1
- package/src/data/servicereference/services/quicksight.json +1 -1
- package/src/data/servicereference/services/ram.json +1 -1
- package/src/data/servicereference/services/rbin.json +1 -1
- package/src/data/servicereference/services/rds-data.json +1 -1
- package/src/data/servicereference/services/rds-db.json +1 -1
- package/src/data/servicereference/services/rds.json +1 -1
- package/src/data/servicereference/services/redshift-data.json +1 -1
- package/src/data/servicereference/services/redshift-serverless.json +1 -1
- package/src/data/servicereference/services/redshift.json +1 -1
- package/src/data/servicereference/services/refactor-spaces.json +1 -1
- package/src/data/servicereference/services/rekognition.json +1 -1
- package/src/data/servicereference/services/repostspace.json +1 -1
- package/src/data/servicereference/services/resiliencehub.json +1 -1
- package/src/data/servicereference/services/resource-explorer-2.json +1 -1
- package/src/data/servicereference/services/resource-explorer.json +1 -1
- package/src/data/servicereference/services/resource-groups.json +1 -1
- package/src/data/servicereference/services/rhelkb.json +1 -1
- package/src/data/servicereference/services/robomaker.json +1 -1
- package/src/data/servicereference/services/rolesanywhere.json +1 -1
- package/src/data/servicereference/services/route53-recovery-cluster.json +1 -1
- package/src/data/servicereference/services/route53-recovery-control-config.json +1 -1
- package/src/data/servicereference/services/route53-recovery-readiness.json +1 -1
- package/src/data/servicereference/services/route53.json +1 -1
- package/src/data/servicereference/services/route53domains.json +1 -1
- package/src/data/servicereference/services/route53globalresolver.json +1 -1
- package/src/data/servicereference/services/route53profiles.json +1 -1
- package/src/data/servicereference/services/route53resolver.json +1 -1
- package/src/data/servicereference/services/rtbfabric.json +1 -1
- package/src/data/servicereference/services/rum.json +1 -1
- package/src/data/servicereference/services/s3-object-lambda.json +1 -1
- package/src/data/servicereference/services/s3-outposts.json +1 -1
- package/src/data/servicereference/services/s3.json +1 -1
- package/src/data/servicereference/services/s3express.json +1 -1
- package/src/data/servicereference/services/s3tables.json +1 -1
- package/src/data/servicereference/services/s3vectors.json +1 -1
- package/src/data/servicereference/services/sagemaker-data-science-assistant.json +1 -1
- package/src/data/servicereference/services/sagemaker-geospatial.json +1 -1
- package/src/data/servicereference/services/sagemaker-mlflow.json +1 -1
- package/src/data/servicereference/services/sagemaker-unified-studio-mcp.json +1 -1
- package/src/data/servicereference/services/sagemaker.json +1 -1
- package/src/data/servicereference/services/savingsplans.json +1 -1
- package/src/data/servicereference/services/scheduler.json +1 -1
- package/src/data/servicereference/services/schemas.json +1 -1
- package/src/data/servicereference/services/scn.json +1 -1
- package/src/data/servicereference/services/sdb.json +1 -1
- package/src/data/servicereference/services/secretsmanager.json +1 -1
- package/src/data/servicereference/services/security-ir.json +1 -1
- package/src/data/servicereference/services/securityagent.json +1 -1
- package/src/data/servicereference/services/securityhub.json +1 -1
- package/src/data/servicereference/services/securitylake.json +1 -1
- package/src/data/servicereference/services/serverlessrepo.json +1 -1
- package/src/data/servicereference/services/servicecatalog.json +1 -1
- package/src/data/servicereference/services/servicediscovery.json +1 -1
- package/src/data/servicereference/services/serviceextract.json +1 -1
- package/src/data/servicereference/services/servicequotas.json +1 -1
- package/src/data/servicereference/services/ses.json +1 -1
- package/src/data/servicereference/services/shield.json +1 -1
- package/src/data/servicereference/services/signer.json +1 -1
- package/src/data/servicereference/services/signin.json +1 -1
- package/src/data/servicereference/services/simspaceweaver.json +1 -1
- package/src/data/servicereference/services/sms-voice.json +1 -1
- package/src/data/servicereference/services/sms.json +1 -1
- package/src/data/servicereference/services/snow-device-management.json +1 -1
- package/src/data/servicereference/services/snowball.json +1 -1
- package/src/data/servicereference/services/sns.json +1 -1
- package/src/data/servicereference/services/social-messaging.json +1 -1
- package/src/data/servicereference/services/sqlworkbench.json +1 -1
- package/src/data/servicereference/services/sqs.json +1 -1
- package/src/data/servicereference/services/ssm-contacts.json +1 -1
- package/src/data/servicereference/services/ssm-guiconnect.json +1 -1
- package/src/data/servicereference/services/ssm-incidents.json +1 -1
- package/src/data/servicereference/services/ssm-quicksetup.json +1 -1
- package/src/data/servicereference/services/ssm-sap.json +1 -1
- package/src/data/servicereference/services/ssm.json +1 -1
- package/src/data/servicereference/services/ssmmessages.json +1 -1
- package/src/data/servicereference/services/sso-directory.json +1 -1
- package/src/data/servicereference/services/sso-oauth.json +1 -1
- package/src/data/servicereference/services/sso.json +1 -1
- package/src/data/servicereference/services/states.json +1 -1
- package/src/data/servicereference/services/storagegateway.json +1 -1
- package/src/data/servicereference/services/sts.json +1 -1
- package/src/data/servicereference/services/support-console.json +1 -1
- package/src/data/servicereference/services/support.json +1 -1
- package/src/data/servicereference/services/supportapp.json +1 -1
- package/src/data/servicereference/services/supportplans.json +1 -1
- package/src/data/servicereference/services/sustainability.json +1 -1
- package/src/data/servicereference/services/swf.json +1 -1
- package/src/data/servicereference/services/synthetics.json +1 -1
- package/src/data/servicereference/services/tag.json +1 -1
- package/src/data/servicereference/services/tax.json +1 -1
- package/src/data/servicereference/services/textract.json +1 -1
- package/src/data/servicereference/services/thinclient.json +1 -1
- package/src/data/servicereference/services/timestream-influxdb.json +1 -1
- package/src/data/servicereference/services/timestream.json +1 -1
- package/src/data/servicereference/services/tiros.json +1 -1
- package/src/data/servicereference/services/tnb.json +1 -1
- package/src/data/servicereference/services/transcribe.json +1 -1
- package/src/data/servicereference/services/transfer.json +1 -1
- package/src/data/servicereference/services/transform-custom.json +1 -1
- package/src/data/servicereference/services/transform.json +1 -1
- package/src/data/servicereference/services/translate.json +1 -1
- package/src/data/servicereference/services/trustedadvisor.json +1 -1
- package/src/data/servicereference/services/ts.json +1 -1
- package/src/data/servicereference/services/user-subscriptions.json +1 -1
- package/src/data/servicereference/services/uxc.json +1 -1
- package/src/data/servicereference/services/vendor-insights.json +1 -1
- package/src/data/servicereference/services/verified-access.json +1 -1
- package/src/data/servicereference/services/verifiedpermissions.json +1 -1
- package/src/data/servicereference/services/voiceid.json +1 -1
- package/src/data/servicereference/services/vpc-lattice-svcs.json +1 -1
- package/src/data/servicereference/services/vpc-lattice.json +1 -1
- package/src/data/servicereference/services/vpce.json +1 -1
- package/src/data/servicereference/services/waf-regional.json +1 -1
- package/src/data/servicereference/services/waf.json +1 -1
- package/src/data/servicereference/services/wafv2.json +1 -1
- package/src/data/servicereference/services/wam.json +1 -1
- package/src/data/servicereference/services/wellarchitected.json +1 -1
- package/src/data/servicereference/services/wickr.json +1 -1
- package/src/data/servicereference/services/wisdom.json +1 -1
- package/src/data/servicereference/services/workdocs.json +1 -1
- package/src/data/servicereference/services/worklink.json +1 -1
- package/src/data/servicereference/services/workmail.json +1 -1
- package/src/data/servicereference/services/workmailmessageflow.json +1 -1
- package/src/data/servicereference/services/workspaces-instances.json +1 -1
- package/src/data/servicereference/services/workspaces-web.json +1 -1
- package/src/data/servicereference/services/workspaces.json +1 -1
- package/src/data/servicereference/services/xray.json +1 -1
- package/src/extension.js +1 -6
- package/src/handlers/completion/action-value.d.ts +2 -2
- package/src/handlers/completion/action-value.js +37 -20
- package/src/handlers/completion/condition-block.d.ts +1 -1
- package/src/handlers/completion/condition-block.js +3 -0
- package/src/handlers/completion/condition-key.d.ts +1 -1
- package/src/handlers/completion/condition-key.js +4 -0
- package/src/handlers/completion/condition-operator.d.ts +1 -1
- package/src/handlers/completion/condition-operator.js +3 -0
- package/src/handlers/completion/effect-value.d.ts +2 -2
- package/src/handlers/completion/effect-value.js +4 -1
- package/src/handlers/completion/index.d.ts +15 -2
- package/src/handlers/completion/index.js +21 -3
- package/src/handlers/completion/principal-block-identifier.d.ts +1 -1
- package/src/handlers/completion/principal-block-identifier.js +2 -2
- package/src/handlers/completion/principal-block-type.d.ts +2 -2
- package/src/handlers/completion/principal-block-type.js +4 -1
- package/src/handlers/completion/principal-block.d.ts +1 -1
- package/src/handlers/completion/principal-block.js +3 -0
- package/src/handlers/completion/principal-identifier-completions.d.ts +4 -1
- package/src/handlers/completion/principal-identifier-completions.js +10 -6
- package/src/handlers/completion/principal-type.d.ts +1 -1
- package/src/handlers/completion/principal-type.js +3 -0
- package/src/handlers/completion/principal-typed-value.d.ts +1 -1
- package/src/handlers/completion/principal-typed-value.js +2 -2
- package/src/handlers/completion/principal-value.d.ts +2 -2
- package/src/handlers/completion/principal-value.js +4 -1
- package/src/handlers/completion/resource-value.d.ts +1 -1
- package/src/handlers/completion/resource-value.js +8 -1
- package/src/handlers/completion/statement-block.d.ts +1 -1
- package/src/handlers/completion/statement-block.js +3 -0
- package/src/handlers/completion/statement-key.d.ts +1 -1
- package/src/handlers/completion/statement-key.js +3 -0
- package/src/handlers/document-link/document-link.d.ts +4 -0
- package/src/handlers/document-link/document-link.js +37 -0
- package/src/lib/iam-policy/reference/services.d.ts +1 -1
- package/src/lib/iam-policy/reference/services.js +5 -1
- package/src/lib/iam-policy/reference/types.d.ts +5 -0
- package/src/lib/treesitter/base.d.ts +1 -0
- package/src/lib/treesitter/hcl.js +43 -29
- package/src/lib/treesitter/json.js +9 -8
- package/src/lib/treesitter/manager.d.ts +2 -0
- package/src/lib/treesitter/manager.js +7 -0
- package/src/lib/treesitter/yaml.js +54 -23
- package/src/server.js +6 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { CompletionList } from 'vscode-languageserver';
|
|
2
2
|
import type { ResourceValueLocation } from '../../lib/iam-policy/location.ts';
|
|
3
|
-
import type
|
|
3
|
+
import { type CompletionContext } from './index.ts';
|
|
4
4
|
export declare function completeResourceValue(location: ResourceValueLocation, context: CompletionContext): CompletionList;
|
|
@@ -2,8 +2,10 @@ import { CompletionItemKind } from 'vscode-languageserver';
|
|
|
2
2
|
import { partitions } from "../../lib/iam-policy/partitions.js";
|
|
3
3
|
import { ServiceReference } from "../../lib/iam-policy/reference/services.js";
|
|
4
4
|
import { expandActionPattern } from "../../lib/iam-policy/wildcard.js";
|
|
5
|
+
import { partialRange } from "./index.js";
|
|
5
6
|
export function completeResourceValue(location, context) {
|
|
6
7
|
const parts = location.partial.split(':');
|
|
8
|
+
const range = partialRange(context.position, location.partial.length);
|
|
7
9
|
const items = [];
|
|
8
10
|
const statement = context.handler.getStatementContext(context.uri, context.position);
|
|
9
11
|
const statementActions = statement?.Action ?? statement?.NotAction ?? [];
|
|
@@ -16,6 +18,7 @@ export function completeResourceValue(location, context) {
|
|
|
16
18
|
label: arn,
|
|
17
19
|
sortText: `0-${arn}`,
|
|
18
20
|
kind: CompletionItemKind.Value,
|
|
21
|
+
textEdit: { range, newText: arn },
|
|
19
22
|
detail: `${resource.service}/${resource.name}`,
|
|
20
23
|
documentation: {
|
|
21
24
|
kind: 'markdown',
|
|
@@ -30,6 +33,7 @@ export function completeResourceValue(location, context) {
|
|
|
30
33
|
items.push({
|
|
31
34
|
label,
|
|
32
35
|
kind: CompletionItemKind.Constant,
|
|
36
|
+
textEdit: { range, newText: label },
|
|
33
37
|
});
|
|
34
38
|
}
|
|
35
39
|
}
|
|
@@ -100,9 +104,11 @@ export function completeResourceValue(location, context) {
|
|
|
100
104
|
}
|
|
101
105
|
else if (parts.length === 5) {
|
|
102
106
|
// suggest account
|
|
107
|
+
const label = `${location.partial}:`;
|
|
103
108
|
items.push({
|
|
104
|
-
label
|
|
109
|
+
label,
|
|
105
110
|
kind: CompletionItemKind.Enum,
|
|
111
|
+
textEdit: { range, newText: label },
|
|
106
112
|
documentation: {
|
|
107
113
|
kind: 'markdown',
|
|
108
114
|
value: 'AWS Account ID',
|
|
@@ -132,6 +138,7 @@ export function completeResourceValue(location, context) {
|
|
|
132
138
|
items.push({
|
|
133
139
|
label,
|
|
134
140
|
kind: CompletionItemKind.Enum,
|
|
141
|
+
textEdit: { range, newText: label },
|
|
135
142
|
detail: resource.name,
|
|
136
143
|
documentation: {
|
|
137
144
|
kind: 'markdown',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CompletionList } from 'vscode-languageserver';
|
|
2
2
|
import type { StatementBlockLocation } from '../../lib/iam-policy/location.ts';
|
|
3
|
-
import type
|
|
3
|
+
import { type CompletionContext } from './index.ts';
|
|
4
4
|
export declare function completeStatementBlock(location: StatementBlockLocation, context: CompletionContext): CompletionList;
|
|
5
5
|
export declare function findHclElement(key: string): {
|
|
6
6
|
policyTypes: Array<"identity" | "resource">;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CompletionItemKind, MarkupKind } from 'vscode-languageserver';
|
|
2
2
|
import { StatementKeys } from "../../lib/iam-policy/statement-keys.js";
|
|
3
|
+
import { partialRange } from "./index.js";
|
|
3
4
|
export function completeStatementBlock(location, context) {
|
|
4
5
|
const statement = context.handler.getStatementContext(context.uri, context.position);
|
|
5
6
|
const existingKeys = deriveExistingKeys(statement);
|
|
@@ -9,6 +10,7 @@ export function completeStatementBlock(location, context) {
|
|
|
9
10
|
if (element)
|
|
10
11
|
existingGroups.add(element.group);
|
|
11
12
|
}
|
|
13
|
+
const range = partialRange(context.position, location.partial.length);
|
|
12
14
|
const items = [];
|
|
13
15
|
for (const [, element] of Object.entries(StatementKeys)) {
|
|
14
16
|
if (existingKeys.includes(element.hclKey))
|
|
@@ -20,6 +22,7 @@ export function completeStatementBlock(location, context) {
|
|
|
20
22
|
items.push({
|
|
21
23
|
label: element.hclKey,
|
|
22
24
|
kind: CompletionItemKind.Field,
|
|
25
|
+
textEdit: { range, newText: element.hclKey },
|
|
23
26
|
documentation: {
|
|
24
27
|
kind: MarkupKind.Markdown,
|
|
25
28
|
value: element.description,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { CompletionList } from 'vscode-languageserver';
|
|
2
2
|
import type { StatementKeyLocation } from '../../lib/iam-policy/location.ts';
|
|
3
|
-
import type
|
|
3
|
+
import { type CompletionContext } from './index.ts';
|
|
4
4
|
export declare function completeStatementKey(location: StatementKeyLocation, context: CompletionContext): CompletionList;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CompletionItemKind, MarkupKind } from 'vscode-languageserver';
|
|
2
2
|
import { StatementKeys } from "../../lib/iam-policy/statement-keys.js";
|
|
3
|
+
import { partialRange } from "./index.js";
|
|
3
4
|
export function completeStatementKey(location, context) {
|
|
4
5
|
const statement = context.handler.getStatementContext(context.uri, context.position);
|
|
5
6
|
const existingKeys = deriveExistingKeys(statement);
|
|
@@ -9,6 +10,7 @@ export function completeStatementKey(location, context) {
|
|
|
9
10
|
if (element)
|
|
10
11
|
existingGroups.add(element.group);
|
|
11
12
|
}
|
|
13
|
+
const range = partialRange(context.position, location.partial.length);
|
|
12
14
|
const items = [];
|
|
13
15
|
for (const [name, element] of Object.entries(StatementKeys)) {
|
|
14
16
|
if (existingKeys.includes(name))
|
|
@@ -20,6 +22,7 @@ export function completeStatementKey(location, context) {
|
|
|
20
22
|
items.push({
|
|
21
23
|
label: name,
|
|
22
24
|
kind: CompletionItemKind.Field,
|
|
25
|
+
textEdit: { range, newText: name },
|
|
23
26
|
documentation: {
|
|
24
27
|
kind: MarkupKind.Markdown,
|
|
25
28
|
value: element.description,
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Connection, DocumentLink, DocumentLinkParams, TextDocuments } from 'vscode-languageserver';
|
|
2
|
+
import type { TextDocument } from 'vscode-languageserver-textdocument';
|
|
3
|
+
import type { TreeManager } from '../../lib/treesitter/manager.ts';
|
|
4
|
+
export declare function documentLinkHandler(params: DocumentLinkParams, documents: TextDocuments<TextDocument>, _treeManager: TreeManager, connection: Connection): DocumentLink[];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ServiceReference } from "../../lib/iam-policy/reference/services.js";
|
|
2
|
+
export function documentLinkHandler(params, documents, _treeManager, connection) {
|
|
3
|
+
const document = documents.get(params.textDocument.uri);
|
|
4
|
+
if (!document)
|
|
5
|
+
return [];
|
|
6
|
+
const text = document.getText();
|
|
7
|
+
const links = [];
|
|
8
|
+
const actionSet = new Set(ServiceReference.getAllActions().map((a) => a.toLowerCase()));
|
|
9
|
+
const pattern = /[a-z0-9-]+:[A-Za-z0-9*?]+/g;
|
|
10
|
+
for (const match of text.matchAll(pattern)) {
|
|
11
|
+
if (!actionSet.has(match[0].toLowerCase()))
|
|
12
|
+
continue;
|
|
13
|
+
const [serviceName, actionName] = match[0].split(':');
|
|
14
|
+
const action = ServiceReference.getAction(serviceName, actionName);
|
|
15
|
+
if (!action)
|
|
16
|
+
continue;
|
|
17
|
+
const index = match.index ?? 0;
|
|
18
|
+
const start = document.positionAt(index);
|
|
19
|
+
const end = document.positionAt(index + match[0].length);
|
|
20
|
+
if (action.iamUrl) {
|
|
21
|
+
links.push({
|
|
22
|
+
range: { start, end },
|
|
23
|
+
target: action.iamUrl,
|
|
24
|
+
tooltip: 'IAM Actions, Conditions, and Context Keys',
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
if (action.operationUrl) {
|
|
28
|
+
links.push({
|
|
29
|
+
range: { start, end },
|
|
30
|
+
target: action.operationUrl,
|
|
31
|
+
tooltip: 'API Operation Documentation',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
connection.console.debug(`Found ${links.length} document links in ${params.textDocument.uri}`);
|
|
36
|
+
return links;
|
|
37
|
+
}
|
|
@@ -5,7 +5,7 @@ export declare class ServiceReference {
|
|
|
5
5
|
static getServicePrincipals(): string[];
|
|
6
6
|
static getAllActions(): Array<string>;
|
|
7
7
|
static getAllServices(): Array<string>;
|
|
8
|
-
static getActionsForService(service: string): Array<
|
|
8
|
+
static getActionsForService(service: string): Array<Action>;
|
|
9
9
|
static getConditionKeysForActions(actions: string[]): Array<{
|
|
10
10
|
name: string;
|
|
11
11
|
types: string[];
|
|
@@ -30,7 +30,11 @@ export class ServiceReference {
|
|
|
30
30
|
return ServiceReference.#allServices;
|
|
31
31
|
}
|
|
32
32
|
static getActionsForService(service) {
|
|
33
|
-
return Object.
|
|
33
|
+
return Object.entries(ServiceReference.getServiceData(service).actions).map(([actionName, action]) => {
|
|
34
|
+
if (!action.name)
|
|
35
|
+
action.name = `${service}:${actionName}`;
|
|
36
|
+
return action;
|
|
37
|
+
});
|
|
34
38
|
}
|
|
35
39
|
static getConditionKeysForActions(actions) {
|
|
36
40
|
const keys = new Map();
|
|
@@ -43,6 +43,7 @@ export type RawReference = {
|
|
|
43
43
|
};
|
|
44
44
|
export type ServiceData = {
|
|
45
45
|
name: string;
|
|
46
|
+
url?: string;
|
|
46
47
|
actions: Record<string, Action>;
|
|
47
48
|
resources: Array<{
|
|
48
49
|
name: string;
|
|
@@ -52,6 +53,8 @@ export type ServiceData = {
|
|
|
52
53
|
conditionKeys: Record<string, ConditionKey>;
|
|
53
54
|
};
|
|
54
55
|
export type Action = {
|
|
56
|
+
name: string;
|
|
57
|
+
service: string;
|
|
55
58
|
conditionKeys: Array<string>;
|
|
56
59
|
resources: Array<{
|
|
57
60
|
name: string;
|
|
@@ -64,6 +67,8 @@ export type Action = {
|
|
|
64
67
|
}>;
|
|
65
68
|
dependentActions?: Array<string>;
|
|
66
69
|
permissionOnly?: boolean;
|
|
70
|
+
operationUrl?: string;
|
|
71
|
+
iamUrl?: string;
|
|
67
72
|
};
|
|
68
73
|
export type ConditionKey = {
|
|
69
74
|
types: Array<string>;
|
|
@@ -163,8 +163,8 @@ export class TreeHcl extends TreeBase {
|
|
|
163
163
|
}
|
|
164
164
|
if (role === null)
|
|
165
165
|
role = 'key';
|
|
166
|
-
const partial = this.#
|
|
167
|
-
return { keys, role, partial };
|
|
166
|
+
const { partial, value } = this.#extractJsonencodePartialAndValue(cursorNode, position);
|
|
167
|
+
return { keys, role, partial, value };
|
|
168
168
|
}
|
|
169
169
|
#getObjectElemKey(element) {
|
|
170
170
|
const keyExpression = element.namedChildren.find((child) => child.type === 'expression');
|
|
@@ -191,20 +191,21 @@ export class TreeHcl extends TreeBase {
|
|
|
191
191
|
.map((element) => this.#getObjectElemKey(element))
|
|
192
192
|
.filter((key) => key !== null);
|
|
193
193
|
}
|
|
194
|
-
#
|
|
194
|
+
#extractJsonencodePartialAndValue(node, position) {
|
|
195
195
|
let current = node;
|
|
196
196
|
while (current) {
|
|
197
197
|
if (current.type === 'identifier' || current.type === 'template_literal') {
|
|
198
|
+
const value = current.text;
|
|
198
199
|
if (position.line === current.startPosition.row) {
|
|
199
|
-
return
|
|
200
|
+
return { partial: value.slice(0, position.column - current.startPosition.column), value };
|
|
200
201
|
}
|
|
201
|
-
return
|
|
202
|
+
return { partial: value, value };
|
|
202
203
|
}
|
|
203
204
|
if (current.type === 'object' || current.type === 'object_elem')
|
|
204
205
|
break;
|
|
205
206
|
current = current.parent;
|
|
206
207
|
}
|
|
207
|
-
return '';
|
|
208
|
+
return { partial: '', value: '' };
|
|
208
209
|
}
|
|
209
210
|
// ---------------------------------------------------------------------------
|
|
210
211
|
// Block mode — block/body/attribute, snake_case keys
|
|
@@ -226,7 +227,7 @@ export class TreeHcl extends TreeBase {
|
|
|
226
227
|
return this.#pickBestCursorContext(context1, context2);
|
|
227
228
|
}
|
|
228
229
|
// Cursor is on the block itself (outside body span) — statement-key level
|
|
229
|
-
const partial = this.#
|
|
230
|
+
const { partial, value } = this.#extractBlockPartialAndValue(node, position);
|
|
230
231
|
// Check for incomplete attributes on the same line (may be in ERROR nodes
|
|
231
232
|
// when tree-sitter can't parse the body due to a missing value)
|
|
232
233
|
const searchParent = statementBody ?? statementBlock;
|
|
@@ -242,6 +243,7 @@ export class TreeHcl extends TreeBase {
|
|
|
242
243
|
keys: [id.text],
|
|
243
244
|
role: 'value',
|
|
244
245
|
partial: '',
|
|
246
|
+
value: '',
|
|
245
247
|
policyFormat: 'hcl-block',
|
|
246
248
|
};
|
|
247
249
|
}
|
|
@@ -251,6 +253,7 @@ export class TreeHcl extends TreeBase {
|
|
|
251
253
|
keys: [],
|
|
252
254
|
role: 'key',
|
|
253
255
|
partial,
|
|
256
|
+
value,
|
|
254
257
|
policyFormat: 'hcl-block',
|
|
255
258
|
};
|
|
256
259
|
}
|
|
@@ -339,8 +342,8 @@ export class TreeHcl extends TreeBase {
|
|
|
339
342
|
}
|
|
340
343
|
if (role === null)
|
|
341
344
|
role = 'key';
|
|
342
|
-
const partial = this.#
|
|
343
|
-
return { keys, role, partial };
|
|
345
|
+
const { partial, value } = this.#extractBlockPartialAndValue(cursorNode, position);
|
|
346
|
+
return { keys, role, partial, value };
|
|
344
347
|
}
|
|
345
348
|
#findEnclosingBlock(node, blockName, statementBody) {
|
|
346
349
|
let current = node;
|
|
@@ -390,20 +393,21 @@ export class TreeHcl extends TreeBase {
|
|
|
390
393
|
#hasBodyAttribute(body, name) {
|
|
391
394
|
return body.namedChildren.some((child) => child.type === 'attribute' && child.namedChildren.some((id) => id.type === 'identifier' && id.text === name));
|
|
392
395
|
}
|
|
393
|
-
#
|
|
396
|
+
#extractBlockPartialAndValue(node, position) {
|
|
394
397
|
let current = node;
|
|
395
398
|
while (current) {
|
|
396
399
|
if (current.type === 'identifier' || current.type === 'template_literal') {
|
|
400
|
+
const value = current.text;
|
|
397
401
|
if (position.line === current.startPosition.row) {
|
|
398
|
-
return
|
|
402
|
+
return { partial: value.slice(0, position.column - current.startPosition.column), value };
|
|
399
403
|
}
|
|
400
|
-
return
|
|
404
|
+
return { partial: value, value };
|
|
401
405
|
}
|
|
402
406
|
if (current.type === 'body' || current.type === 'attribute' || current.type === 'block')
|
|
403
407
|
break;
|
|
404
408
|
current = current.parent;
|
|
405
409
|
}
|
|
406
|
-
return '';
|
|
410
|
+
return { partial: '', value: '' };
|
|
407
411
|
}
|
|
408
412
|
// ---------------------------------------------------------------------------
|
|
409
413
|
// Shared
|
|
@@ -533,20 +537,21 @@ export class TreeHcl extends TreeBase {
|
|
|
533
537
|
}
|
|
534
538
|
if (!foundStatement || !lastKey || !policyFormat)
|
|
535
539
|
return null;
|
|
536
|
-
// Extract partial: when the key came from an attribute/object_elem
|
|
537
|
-
// contains the quote (e.g., `effect = "`),
|
|
538
|
-
// is inside a string (open quote slurped subsequent lines),
|
|
539
|
-
// template_literal. Otherwise extract from ERROR node text.
|
|
540
|
+
// Extract partial and value: when the key came from an attribute/object_elem
|
|
541
|
+
// that contains the quote (e.g., `effect = "`), they're empty. When the
|
|
542
|
+
// cursor node is inside a string (open quote slurped subsequent lines),
|
|
543
|
+
// extract from the template_literal. Otherwise extract from ERROR node text.
|
|
540
544
|
let partial = '';
|
|
545
|
+
let value = '';
|
|
541
546
|
if (!lastKeyFromAttribute) {
|
|
542
547
|
if (this.#isInsideQuote(node)) {
|
|
543
|
-
partial = this.#
|
|
548
|
+
({ partial, value } = this.#extractQuotedPartialAndValue(node, position));
|
|
544
549
|
}
|
|
545
550
|
else if (nodeBefore && this.#isInsideQuote(nodeBefore)) {
|
|
546
|
-
partial = this.#
|
|
551
|
+
({ partial, value } = this.#extractQuotedPartialAndValue(nodeBefore, position));
|
|
547
552
|
}
|
|
548
553
|
else {
|
|
549
|
-
partial = this.#
|
|
554
|
+
({ partial, value } = this.#extractPartialAndValueFromErrorNode(errorNode, position));
|
|
550
555
|
}
|
|
551
556
|
}
|
|
552
557
|
// Build keys with sub-block prefix when inside a sub-block
|
|
@@ -561,6 +566,7 @@ export class TreeHcl extends TreeBase {
|
|
|
561
566
|
keys,
|
|
562
567
|
role: 'value',
|
|
563
568
|
partial,
|
|
569
|
+
value,
|
|
564
570
|
policyFormat,
|
|
565
571
|
};
|
|
566
572
|
}
|
|
@@ -568,27 +574,29 @@ export class TreeHcl extends TreeBase {
|
|
|
568
574
|
* Extract partial from inside a quoted string (when the open quote caused
|
|
569
575
|
* tree-sitter to slurp subsequent lines into a string_lit).
|
|
570
576
|
*/
|
|
571
|
-
#
|
|
577
|
+
#extractQuotedPartialAndValue(node, position) {
|
|
572
578
|
let current = node;
|
|
573
579
|
while (current) {
|
|
574
580
|
if (current.type === 'template_literal') {
|
|
581
|
+
const value = current.text;
|
|
575
582
|
if (position.line === current.startPosition.row) {
|
|
576
|
-
return
|
|
583
|
+
return { partial: value.slice(0, position.column - current.startPosition.column), value };
|
|
577
584
|
}
|
|
578
|
-
return '';
|
|
585
|
+
return { partial: '', value };
|
|
579
586
|
}
|
|
580
587
|
if (current.type === 'quoted_template_start')
|
|
581
|
-
return '';
|
|
588
|
+
return { partial: '', value: '' };
|
|
582
589
|
if (current.type === 'string_lit') {
|
|
583
590
|
// Cursor is right after the opening quote, no template_literal yet
|
|
584
|
-
return '';
|
|
591
|
+
return { partial: '', value: '' };
|
|
585
592
|
}
|
|
586
593
|
current = current.parent;
|
|
587
594
|
}
|
|
588
|
-
return '';
|
|
595
|
+
return { partial: '', value: '' };
|
|
589
596
|
}
|
|
590
|
-
#
|
|
597
|
+
#extractPartialAndValueFromErrorNode(errorNode, position) {
|
|
591
598
|
let afterColumn = 0;
|
|
599
|
+
let nextChildColumn = null;
|
|
592
600
|
for (const child of errorNode.children) {
|
|
593
601
|
if (child.startPosition.row !== position.line)
|
|
594
602
|
continue;
|
|
@@ -599,14 +607,20 @@ export class TreeHcl extends TreeBase {
|
|
|
599
607
|
if (child.endPosition.column <= position.column) {
|
|
600
608
|
afterColumn = child.endPosition.column;
|
|
601
609
|
}
|
|
610
|
+
else if (nextChildColumn === null && child.startPosition.column > position.column) {
|
|
611
|
+
nextChildColumn = child.startPosition.column;
|
|
612
|
+
}
|
|
602
613
|
}
|
|
603
614
|
const lines = errorNode.text.split('\n');
|
|
604
615
|
const lineIndex = position.line - errorNode.startPosition.row;
|
|
605
616
|
if (lineIndex < 0 || lineIndex >= lines.length)
|
|
606
|
-
return '';
|
|
617
|
+
return { partial: '', value: '' };
|
|
607
618
|
const line = lines[lineIndex];
|
|
608
619
|
const startColumn = lineIndex === 0 ? errorNode.startPosition.column : 0;
|
|
609
|
-
|
|
620
|
+
const partial = line.slice(afterColumn - startColumn, position.column - startColumn);
|
|
621
|
+
const valueEnd = nextChildColumn !== null ? nextChildColumn - startColumn : line.length;
|
|
622
|
+
const value = line.slice(afterColumn - startColumn, valueEnd);
|
|
623
|
+
return { partial, value };
|
|
610
624
|
}
|
|
611
625
|
#getExpressionIdentifier(expression) {
|
|
612
626
|
const variableExpression = expression.namedChildren.find((child) => child.type === 'variable_expr');
|
|
@@ -122,8 +122,8 @@ export class TreeJson extends TreeBase {
|
|
|
122
122
|
}
|
|
123
123
|
if (role === null)
|
|
124
124
|
role = 'key';
|
|
125
|
-
const partial = this.#
|
|
126
|
-
return { keys, role, partial };
|
|
125
|
+
const { partial, value } = this.#extractPartialAndValue(cursorNode, position);
|
|
126
|
+
return { keys, role, partial, value };
|
|
127
127
|
}
|
|
128
128
|
/**
|
|
129
129
|
* Walk up from a node to find an object that sits inside a Statement array.
|
|
@@ -234,23 +234,24 @@ export class TreeJson extends TreeBase {
|
|
|
234
234
|
return false;
|
|
235
235
|
}
|
|
236
236
|
/**
|
|
237
|
-
* Extract the partial text
|
|
238
|
-
* node
|
|
237
|
+
* Extract the partial text (up to cursor) and full value from the nearest
|
|
238
|
+
* string_content node.
|
|
239
239
|
*/
|
|
240
|
-
#
|
|
240
|
+
#extractPartialAndValue(node, position) {
|
|
241
241
|
let current = node;
|
|
242
242
|
while (current) {
|
|
243
243
|
if (current.type === 'string_content') {
|
|
244
|
+
const value = current.text;
|
|
244
245
|
if (position.line === current.startPosition.row) {
|
|
245
|
-
return
|
|
246
|
+
return { partial: value.slice(0, position.column - current.startPosition.column), value };
|
|
246
247
|
}
|
|
247
|
-
return
|
|
248
|
+
return { partial: value, value };
|
|
248
249
|
}
|
|
249
250
|
if (current.type === 'object' || current.type === 'pair')
|
|
250
251
|
break;
|
|
251
252
|
current = current.parent;
|
|
252
253
|
}
|
|
253
|
-
return '';
|
|
254
|
+
return { partial: '', value: '' };
|
|
254
255
|
}
|
|
255
256
|
/**
|
|
256
257
|
* Read string values from a JSON pair's value (string or array of strings).
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import type { Connection } from 'vscode-languageserver';
|
|
1
2
|
import type { TreeBase } from './base.ts';
|
|
2
3
|
export type DocumentFormat = 'yaml' | 'json' | 'hcl';
|
|
3
4
|
export declare class TreeManager {
|
|
4
5
|
#private;
|
|
6
|
+
constructor(connection: Connection);
|
|
5
7
|
openDocument(uri: string, content: string, languageId: string): Promise<void>;
|
|
6
8
|
updateDocument(uri: string, content: string): Promise<void>;
|
|
7
9
|
closeDocument(uri: string): void;
|
|
@@ -13,7 +13,12 @@ export class TreeManager {
|
|
|
13
13
|
hcl: null,
|
|
14
14
|
};
|
|
15
15
|
#uriToFormat = new Map();
|
|
16
|
+
#connection;
|
|
17
|
+
constructor(connection) {
|
|
18
|
+
this.#connection = connection;
|
|
19
|
+
}
|
|
16
20
|
async openDocument(uri, content, languageId) {
|
|
21
|
+
this.#connection.console.info(`Opening document: ${uri} with language ID: ${languageId}`);
|
|
17
22
|
const format = TreeManager.#detectFormat(uri, languageId);
|
|
18
23
|
if (!format)
|
|
19
24
|
return;
|
|
@@ -24,6 +29,7 @@ export class TreeManager {
|
|
|
24
29
|
this.#trees[format].openDocument(uri, content);
|
|
25
30
|
}
|
|
26
31
|
async updateDocument(uri, content) {
|
|
32
|
+
this.#connection.console.debug(`Updating document: ${uri} with length: ${content.length}`);
|
|
27
33
|
const format = this.#uriToFormat.get(uri);
|
|
28
34
|
if (!format)
|
|
29
35
|
return;
|
|
@@ -33,6 +39,7 @@ export class TreeManager {
|
|
|
33
39
|
this.#trees[format].updateDocument(uri, content);
|
|
34
40
|
}
|
|
35
41
|
closeDocument(uri) {
|
|
42
|
+
this.#connection.console.info(`Closing document: ${uri}`);
|
|
36
43
|
const format = this.#uriToFormat.get(uri);
|
|
37
44
|
if (!format)
|
|
38
45
|
return;
|